Вызов RaisedPropertyChanged для родительского класса при изменении дочернего свойства

Структура программы

В настоящее время я использую в своем приложении фреймворк MVVMLight 4.1.

У меня есть модель представления XViewModel, которая охватывает экземпляр XClass, X. X содержит много свойств, например S. У меня также есть еще один экземпляр XClass в другой ViewModel.

ViewModel

public XViewModelClass XViewModel : ViewModelBase
{
    public XClass X
    {
        get
        {
            return x;
        set
        }
            if(value == x)
            {
                return;                 
            }
            var oldValue = x;
            x = value;
            RaisePropertyChanged(XPropertyName, oldValue, x, true)
        }

    }
    private XClass x;
    public const string XPropertyName = "X"
}

ViewModel2

public YViewModelClass YViewModel : ViewModelBase
{
    public YViewModel()
    {
        Messenger.Default.Register<PropertyChangedMessage<XClass>>(this, message =>
        {
            X2 = message.NewValue
        });
    }

    public XClass X2
    {
        get
        {
            return x2
        set
        }
            if(value == x2)
            {
                return;                 
            }
            var oldValue = x2
            x2= value;
            RaisePropertyChanged(X2PropertyName)
        }

    }
    private string x2;
    public const string XPropertyName = "X2" 


}

Модель

public class X : ObservableObject
{
    public string S
    {
        get
        {
            return s;
        set
        }
            if(value == S)
            {
                return;                 
            }

            s = value;
            RaisePropertyChanged(SPropertyName)
        }

    }
    private string s;
    public const string XPropertyName = "S" 
}

Проблема

Как сделать так, чтобы при изменении какого-либо свойства в X (например, S было установлено другое значение), RaisePropertyChanged вызывается для X. Было бы лучше, если бы мне не приходилось отправлять сообщение об изменении свойства для каждого свойства в моей модели.

Причина в том, что у меня есть еще один экземпляр XClass, `X2 'в другой ViewModel, и я хочу синхронизировать оба экземпляра.


person Kiang Teng    schedule 01.05.2013    source источник


Ответы (1)


Проксимо,

Можете ли вы предоставить дополнительную информацию о том, чего вы пытаетесь достичь, запустив PropertyChangedEvent для X, когда установлен дочерний член? Обычно в WPF вас беспокоит только инициирование этого события для поля свойства / поддержки, к которому вы привязаны, в данном случае X.S. Есть ли конкретный вариант использования для получения уведомлений, когда член X установлен вне сценария, который я предоставил?

person Justin    schedule 01.05.2013
comment
У меня есть еще один экземпляр XClass в другой модели представления, который я постоянно обновляю, используя перегрузку метода RaisePropertyChanged для создания сообщения PropertyChanged и регистрации для получения сообщения в другой модели представления. - person Kiang Teng; 01.05.2013