gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:53:27 26 4
gpt4 key购买 nike

我正在寻找一种解决方案,以在其中一个内部属性发生变化时触发整个属性的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com