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.
}

Обратитесь к документации здесь

Событие INotifyPropertyChanged.PropertyChanged

Другие вопросы по тегам