当子属性更改时,为父类调用RaisePropertyChanged

时间:2013-05-01 03:44:13

标签: c# wpf mvvm mvvm-light

程序结构

目前我在我的应用程序中使用MVVMLight 4.1框架。

我有一个视图模型XViewModel,它包含XClassX的实例。 X包含许多属性,例如S。我在另一个ViewModel中还有另一个XClass实例。

视图模型

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。如果我不必为模型中的每个属性发送属性更改消息,那将是最好的。

背后的原因是我在另一个ViewModel中有另一个XClass,“X2”的实例,我想让两个实例保持同步。

1 个答案:

答案 0 :(得分:0)

Proximo软体,

当您设置子成员时,是否可以通过为X触发PropertyChangedEvent来提供有关您要完成的内容的更多信息?通常在WPF中你会担心 仅限于为您绑定的属性/支持字段引发该事件,在本例中为X.S.是否有一个特定的用例,当X的成员被设置在我提供的场景之外时被通知?