c# - 如何根据其他 ViewModel 中设置的设置动态更新一个 ViewModel 中的属性?
问题描述
我的 ViewModel #1 中有这个
public bool IsThereAProperty
{
get
{
return App.Current.Properties.ContainsKey("myKey");
}
}
在我看来,我从这个属性绑定。我该如何更新它,以便如果我向 App.Current.Properties(在其他 ViewModels 中)添加一个键,那么这个 ViewModel #1 和我的视图中的更改也会受到尊重?
解决方案
我认为ViewModel中的属性不会动态更新,通过App.Current.Properties
是全局属性,如果你在其他ViewModel中添加一个键App.Current.Properties
,全局属性会改变,但是你IsThereAProperty
ViewModel中的属性不会,因为它只是属性你的视图模型,所以你应该通知你的视图模型更新IsThereAProperty
,然后它会更新绑定的视图。
当您在另一个视图模型中添加键时,您可以使用MessagingCenter通知视图模型。
例如,在 viewmodel#2 中,您添加一个密钥并删除该密钥:
if (!App.Current.Properties.ContainsKey("myKey"))
{
App.Current.Properties.Add("myKey", true);
MessagingCenter.Send<string, bool>("change", "add a key", App.Current.Properties.ContainsKey("myKey"));
}
else
{
App.Current.Properties.Remove("myKey");
MessagingCenter.Send<string, bool>("change", "add a key", App.Current.Properties.ContainsKey("myKey"));
}
然后在你的viewmodel#1中:
public class Model1 : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public bool isIsThereAProperty;
public bool IsIsThereAProperty
{
set
{
isIsThereAProperty = App.Current.Properties.ContainsKey("myKey");
OnPropertyChanged("IsIsThereAProperty");
}
get
{
return App.Current.Properties.ContainsKey("myKey");
}
}
public Model1()
{
MessagingCenter.Subscribe<string>("change","add a key" ,(sender)=>
{
OnPropertyChanged("IsIsThereAProperty");
});
}
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
推荐阅读
- c# - 是否可以强制关注 CommonOpenFileDialog
- arduino - 当从蓝牙接收到信号时旋转电机,按下按钮时停止电机
- excel - 如果没有相关过滤器,如何在复制时忽略数据透视表
- android - 应用更新后保持/恢复默认暗模式设置
- javascript - for-await-of 是否等待当前迭代完成后再进行下一个迭代?
- javascript - 如何让 javascript 打开和关闭侧边菜单?
- jquery - 如何在按钮单击或下拉更改jquery上调用函数
- json - 通过正则表达式查找密钥的 Json 路径
- excel - 为什么我的 IF 函数不能将单元格中的所有值都带入
- jqplot - 为什么图形渲染在 chrome 中显示不好?