c# - MVVM检测子类的属性变化

标签 c# wpf mvvm inotifypropertychanged simple-mvvm

我正在使用 SimpleMVVM 并有两个单独的类(模型),一个使用第二个,如下所示:

    public class Database : ModelBase<Database>
    {
        public String ServerName //{ get; set; }
        {
            get { return _ServerName; }
            set
            {
                if (_ServerName != value)
                {
                    _ServerName = value;
                    NotifyPropertyChanged(m => m.ServerName);
                }
            }
        }
        private String _ServerName = "MyTestServer";

        // other properties removed for brevity
    }

public class MyConfiguration
{
        /// <summary>
        /// Database information
        /// </summary>
        public Database DatabaseInfo
        {
            get { return _DatabaseInfo; }
            set
            {
                if (_DatabaseInfo != value)
                {
                    _DatabaseInfo = value;
                    NotifyPropertyChanged(m => m.DatabaseInfo);
                }
            }

        }
        private Database _DatabaseInfo = new Database();
}

'ServerName' 改变时,NotifyPropertyChanged(m => m.ServerName); 命令执行但不是 NotifyPropertyChanged(m => m.DatabaseInfo );

如何让 NotifyPropertyChanged(m => m.DatabaseInfo);Database 的一个属性发生变化时触发?

最佳答案

您可以使用 PropertyChanged eventINotifyPropertyChanged 接口(interface)告诉您子属性何时更改。

在您的 MyConfiguration 类中:

public Database DatabaseInfo
{
    get { return _DatabaseInfo; }
    set
    {
        if (_DatabaseInfo != value)
        {
            _DatabaseInfo = value;
            NotifyPropertyChanged(m => m.DatabaseInfo);
            DatabaseInfo.PropertyChanged += DataBasePropertyChanged;
        }
    }
}

...

private void DataBasePropertyChanged(object sender, PropertyChangedEventArgs e)
{
    NotifyPropertyChanged(m => m.DatabaseInfo);
}

请注意,您每次更改 DatabaseInfo 属性值时都需要附加此监听器。另外请注意,如果您只想听一个属性,那么您可以这样做:

private void DataBasePropertyChanged(object sender, PropertyChangedEventArgs e)
{
    if (e.PropertyName == "ServerName") NotifyPropertyChanged(m => m.DatabaseInfo);
}

关于c# - MVVM检测子类的属性变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25268384/

相关文章:

c# - 在 MVVMLight 中关于 ViewModelLocator 正确使用 MEF

c# - wpf 全局禁用 Tabstop

c# - 如何将按钮添加为 DrawingVisual 的子项

c# - 仅在一个 LINQ 表达式中获取 IEnumerable 集合的总和

c# - Visual Studio WinForm 应用程序应编译并输出到特定目录

c# - WPF半透明按钮控制MediaElement

c# - raisepropertychanged 和 PropertyChanged 有什么区别?

c# - 在 MVVM WPF 中打开新窗口

c# - 有什么方法可以在不重载函数的情况下将 MongoDB ObjectId 用作 C# 中的可选参数

c# - 如何从十进制转换为二进制 用 ~ 反转并转换回十进制