C# 2个类(1个VM 1服务)更改/访问singleton类中的属性
因此,当涉及到一些布尔值时,我尝试使用我的中介类作为我的服务和我的VM之间的中间层 在我的调解人中,我们有:C# 2个类(1个VM 1服务)更改/访问singleton类中的属性,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,因此,当涉及到一些布尔值时,我尝试使用我的中介类作为我的服务和我的VM之间的中间层 在我的调解人中,我们有: private bool isAddGroupChecked = false; public bool IsAddGroupChecked { get { return isAddGroupChecked; } set { isAddGroupChecked = value;
private bool isAddGroupChecked = false;
public bool IsAddGroupChecked
{
get { return isAddGroupChecked; }
set
{
isAddGroupChecked = value;
NotifyPropertyChanged();
}
}
My service通过执行以下更改操作来检索/更改此值
ActionMediator.Instance.IsAddGroupChecked = false;
我的虚拟机可以通过视图更改该布尔值,并具有以下属性:
public ActionMediator ActionMediator
{
get { return ActionMediator.Instance; }
}
public bool IsAddGroupChecked
{
get { return ActionMediator.IsAddGroupChecked; }
set
{
ActionMediator.IsAddGroupChecked = value;
NotifyOfPropertyChange(() => IsAddGroupChecked);
}
}
问题是,当您单击切换isAddGroupChecked时,singleton上的值将正确更改为True。但是,当我的服务将值say back更改为false时,不会通知VM。。。。。我哪里做错了?我这样做是为了让我的服务和虚拟机不会通过此相互耦合……看起来您的单例中的PropertyChanged事件没有分配到您的虚拟机上,这就是为什么没有通知它,因为您的服务将更改单例上的状态,而不是虚拟机上的状态
所以你至少有三个选择
从VM上的singleton中删除PropertyChanged事件以更改VM状态。
公共虚拟机
{
ActionMediator.Instance.PropertyChanged+=新的PropertyChangedEventHandlerMediator\u PropertyChanged;
}
私有无效中介\u PropertyChangedobject发送方,PropertyChangedEventArgs e
{
如果e.PropertyName==IsAddGroupChecked
this.IsAddGroupChecked=ActionMediator.Instance.IsAddGroupChecked;
}
如果您选择这个,那么修改您的中介程序以避免循环也是一个好主意
private bool isAddGroupChecked=false;
公共bool IsAddGroupChecked
{
获取{return isAddGroupChecked;}
设置
{
如果值!=isAddGroupChecked
{
isAddGroupChecked=值;
通知财产变更;
}
}
}
为您的服务提供一个VM实例,这样它就可以直接更改状态,但这不是一个好主意
从VM中删除IsAddGroupChecked属性,并将视图直接绑定到ActionMediator.IsAddGroupChecked
第三种选择似乎可行。。。选项1和选项3之间的一个比另一个好吗?我会试试第三个。更直截了当的是,这有什么理由被否决吗?如果是的话,谁投了反对票,谁能说明他们为什么这样做?