我正在使用 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
event的 INotifyPropertyChanged
接口(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/