将控件绑定到对象是否算为订阅?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (24)

因此,我目前正在MVVM中使用数据库。因此,我的类从INotifyPropertyChanged中读取,我将我的控件绑定到类中的属性。通常,在创建事件时,会使用如下方法显式地订阅它+= myMethod然而,当我这样做的时候,我看不出来+=但它还是有效的。

每当我将PropertyChanged事件绑定到属性时,我的控件如何隐式地订阅该事件?

public event PropertyChangedEventHandler PropertyChanged;

MasterViewModel

class MasterViewModel
    {
        public Username Username { get; } = new Username();
    }

XAML

<TextBox Name="tbUsername" HorizontalAlignment="Left" Height="23" Margin="381,132,0,0" TextWrapping="Wrap" Text="{Binding Username.TheUsername}" VerticalAlignment="Top" Width="120"/>

class Username : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        public Username()
        {
            TheUsername = "Hello World!";
        }

        private string _username;

        public string TheUsername
        {
            get { return _username; }
            set
            {
                _username = value;
                OnPropertyChanged("TheUsername");
            }
        }



        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
提问于
用户回答回答于
用户回答回答于

框架(WPF)负责订阅。它应用MSDN上提到的弱事件模式

简而言之,框架检查绑定的源对象是否实现了INotifyPropertyChanged接口,如果有,则订阅PropertyChanged幕后事件。在WPF中如何在内部处理这个问题,这是一个实现细节,不需要真正关心或依赖于这个细节。

扫码关注云+社区

领取腾讯云代金券