C# 2个类(1个VM 1服务)更改/访问singleton类中的属性

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;

因此,当涉及到一些布尔值时,我尝试使用我的中介类作为我的服务和我的VM之间的中间层

在我的调解人中,我们有:

    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之间的一个比另一个好吗?我会试试第三个。更直截了当的是,这有什么理由被否决吗?如果是的话,谁投了反对票,谁能说明他们为什么这样做?