Tuesday, September 24, 2019

[Code Snippet] Example of using Delegate, Func and Action side by side in C#

1 Comment
Quick and dirty example of using Delegate, Func and Action
side by side in C# to show how to use function pointer  or callback in C#


Example #1  Delegate and Func side by side

     static int DoubleTheValue(int x)
        {
            return x * 2;
        }

        // delegate type should match the function signature  - DoubleTheValue
        public delegate int functionDelegateType(int x);
     
        static void Method1(functionDelegateType func)
        {
            int doubleValue = func(5);
        }


        static void Method2(Func<int, int> func) // easier syntax
        {
            int doubleValue = func(5);
        }

        static void Main(string[] args)
        {
            Method1(DoubleTheValue);

            Method2(DoubleTheValue);
        }

Example #2  Delegate and Action side by side

static void DisplayOnConsole(int x)
        {
            Console.WriteLine(x.ToString());
        }

        // delegate type should match the function signature  - DisplayOnConsole
        public delegate void functionDelegateType (int x);
        static void Method1(functionDelegateType func)
        {
            func(5);
        }

     
        static void Method2(Action<int> func) // easier syntax
        {
            func(5);
        }

     
        static void Main(string[] args)
        {
            Method1(DisplayOnConsole);
            Method2(DisplayOnConsole);
        }

Reference:
https://social.msdn.microsoft.com/Forums/vstudio/en-US/a1ac99ed-0801-4773-a866-4223d42422cf/how-to-pass-function-as-an-argument-to-another-function-in-c?forum=csharpgeneral

Tuesday, September 3, 2019

[Code snippet] INotifyPropertyChanged in the model and subscribed the PropertyChanged event of the model in ViewModel

Be The First To Comment
internal class Model:INotifyPropertyChanged
    {
        public Model()
        {
        }

        string _FirstName = "Shahir";
        public string FirstName
        {
            get { return _FirstName; }
            set
            {
                _FirstName = value;
                OnPropertyChanged();
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            if(PropertyChanged!=null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }


internal class MyViewModel:INotifyPropertyChanged
    {
        private Model myModel;

        public MyViewModel(Model model)
        {
            this.myModel = model;
            myModel.PropertyChanged += myModel_PropertyChanged;
        }


        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged([CallerMemberName] string propertyName = "")
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }


        string _FirstName;
        public string MyFirstName
        {
            get { return myModel.FirstName; }
            set
            {
                _FirstName = value;
                OnPropertyChanged();
            }
        }

        private void myModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == "FirstName")
            {
                MyFirstName = myModel.FirstName;
            }
        }
    }

REFERECE - https://www.codeproject.com/Questions/1055820/How-the-Model-changes-could-be-notified-to-ViewMod
 

© 2011 GIS and Remote Sensing Tools, Tips and more .. ToS | Privacy Policy | Sitemap

About Me