wpf - 如果内部属性更改,则整个对象的 RaisePropertyChanged

标签 wpf mvvm properties propertychanged

我正在寻找一种解决方案,以在其中一个内部属性发生变化时触发整个属性的 PropertyChanged。所以这是模型:

public class MainStatus : ObservableObject
{
    private bool _safety;
    public bool Safety
    {
        get { return _safety; }
        set
        {
            if (_safety == value)
                return;
            _safety = value;
            RaisePropertyChanged("Safety");
        }
    }
    private bool _setupMode
    public bool SetupMode
    {
        get { return _setupMode; }
        set
        {
            if (_setupMode == value)
                return;
            _setupMode = value;
            RaisePropertyChanged("SetupMode");
        }
    }
}

它还有一些属性(bool、int 和 string)。

在虚拟机中它是这样使用的:

private MainStatus _mainStatus;
public MainStatus MainStatus
{
    get { return _mainStatus; }
    set
    {
        if (_mainStatus == value)
            return;
        _mainStatus = value;
        RaisePropertyChanged("MainStatus");
    }
}

我可以像这样绑定(bind)到内部属性:

<DataTrigger Binding="{Binding MainStatus.Safety}" Value="true">

一切正常。但如果其中一个内部属性发生变化,我需要将整个 MainStatus 发送到其他 VM。所以我像这样更改了属性:

public MainStatus MainStatus
{
    get { return _mainStatus; }
    set
    {
        if (_mainStatus == value)
            return;
        _mainStatus = value;
        RaisePropertyChanged("MainStatus");
        Messenger.Default.Send<MainStatusMessage>(new MainStatusMessage() { MainStatus = _mainStatus });
    }
}

但这行不通。如果其中一个内部属性发生更改,似乎永远不会触发 MainStatus 的 PropertyChanged。我该如何解决?

最佳答案

在您的 VM 中,您可以订阅 Mainstatus.PropertyChanged 事件,例如:

 this.MainStatus.PropertyChanged += new PropertyChangedEventHandler(MainStatus_PropertyChanged);

 //..........
 void MainStatus_PropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     RaisePropertyChanged("MainStatus");
 }

关于wpf - 如果内部属性更改,则整个对象的 RaisePropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26053646/

相关文章:

c# - 为什么 (WPF) 窗口不是 0.0 像素宽?

c# - 在新窗口中打开新窗口

c# - wpf - 更新的依赖属性不触发绑定(bind)

c# - WPF UserControl 的服务器端渲染

c# - MVVM 中央应用程序逻辑

xaml - CalendarDatePicker 在第二次选择相同的日期时返回 null

java - java中属性中的动态占位符替换

Python 属性文件

javascript - JavaScript 的属性访问表达式

c# - 使用 MVVM 时如何使 TextBox 成为 "password box"并显示星星?