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
изменения?
2 ответа
Вы можете использовать PropertyChanged
событие INotifyPropertyChanged
интерфейс, чтобы сообщить вам, когда изменяется дочернее свойство.
В вашем 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);
}
private Database _DatabaseInfo = new Database();
public MyConfiguration()
{
this._DatabaseInfo.PropertyChanged += new PropertyChangedEventHandler(propChanged);
}
private void propChanged(object sender, PropertyChangedEventArgs e)
{
// Now you can update the _DatabaseInfo.DatabaseInfo property to force the property changed event to fire.
}
Обратитесь к документации здесь