Handling OnPropertyChanged

前端 未结 4 1506
南笙
南笙 2020-12-07 16:12

I\'m not well versed in event-based programming. Basically, I\'m still stumbling around with it. I\'m trying to get something set up, but even with the tutorials, I can\'t w

4条回答
  •  执笔经年
    2020-12-07 16:33

    The link that you looked is for the MVVM pattern and WPF. It is not a general C# implementation. You need something like this:

    public event EventHandler PropertyChanged;
    
        public int SomeMember {
            get {
                return this.someMember;
            }
            set {
                if (this.someMember != value) {
                    someMember = value;
                    if (PropertyChanged != null) { // If someone subscribed to the event
                        PropertyChanged(this, EventArgs.Empty); // Raise the event
                    }
                }
            }
    

    ...

    public void addChatter(ChattyClass chatter) {
        myChatters.add(chatter);
        chatter.PropertyChanged += listner; // Subscribe to the event
    }
    // This will be called on property changed
    private void listner(object sender, EventArgs e){
        Console.WriteLine("Hey! Hey! Listen! A property of a chatter in my list has changed!");
    }
    

    If you want to know what property has changed you need to change your event definition to:

    public event PropertyChangedEventHandler PropertyChanged;
    

    And change the calling to:

    public int SomeMember {
        get {
            return this.someMember;
        }
        set {
            if (this.someMember != value){
                someMember = value;
                if (PropertyChanged != null) { // If someone subscribed to the event
                    PropertyChanged(this, new PropertyChangedEventArgs("SomeMember")); // Raise the event
                }
            }
       }
    
       private void listner(object sender, PropertyChangedEventArgs e) {
           string propertyName = e.PropertyName;
           Console.WriteLine(String.Format("Hey! Hey! Listen! a {0} of a chatter in my list has changed!", propertyName));
       }
    

提交回复
热议问题