el-*_*ino 2 wpf properties mvvm 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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
它还有更多属性(bool、int 和 string)。
在虚拟机中它的使用方式如下:
private MainStatus _mainStatus;
public MainStatus MainStatus
{
get { return _mainStatus; }
set
{
if (_mainStatus == value)
return;
_mainStatus = value;
RaisePropertyChanged("MainStatus");
}
}
Run Code Online (Sandbox Code Playgroud)
我可以像这样绑定到内部属性:
<DataTrigger Binding="{Binding MainStatus.Safety}" Value="true">
Run Code Online (Sandbox Code Playgroud)
这一切都很好。但如果内部属性之一发生变化,我需要将整个 MainStatus 发送到其他虚拟机。所以我像这样改变了属性:
public MainStatus MainStatus
{
get { return _mainStatus; }
set
{
if (_mainStatus == value)
return;
_mainStatus = value;
RaisePropertyChanged("MainStatus");
Messenger.Default.Send<MainStatusMessage>(new MainStatusMessage() { MainStatus = _mainStatus });
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用。MainStatus如果内部属性之一发生变化,似乎永远不会触发 PropertyChanged 。我该如何解决这个问题?
在您的虚拟机中,您可以订阅Mainstatus.PropertyChanged类似以下的事件:
this.MainStatus.PropertyChanged += new PropertyChangedEventHandler(MainStatus_PropertyChanged);
//..........
void MainStatus_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
RaisePropertyChanged("MainStatus");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3336 次 |
| 最近记录: |