C# WPF MVVM |更改绑定到 StatusBar 变量

C# WPF MVVM | Change Binded to StatusBar Vars

所以,我有一个状态栏作为 UserControl。

型号:

public class StatusBarModel : BindableBase
{
    private string _status;
    public string Status
    {
        get { return _status; }
        set
        {
            _status = value;
            RaisePropertyChanged("Status");
        }
    }

    private int _p_value;
    public int P_Value
    {
        get { return _p_value; }
        set
        {
            _p_value = value;
            RaisePropertyChanged("P_Value");
        }
    }

}

视图模型:

 public class StatusBarVM : BindableBase
{
    readonly source.elements.StatusBar.StatusBarModel _model = new source.elements.StatusBar.StatusBarModel();
    public StatusBarVM()
    {
        _model.PropertyChanged += (s, e) => { RaisePropertyChanged(e.PropertyName); };

    }

    public string Status
    {
        get { return _model.Status; }
        set { _model.Status = value; }
    }

    public int P_Value
    {
        get { return _model.P_Value; }
        set { _model.P_Value = value; }
    }

}

例如,我想更改其他 ViewModel 的 Status 变量。 我该怎么做?我见过只有按钮等的例子

您可以创建一个静态 class 来保存该值。

public static class Globals()
{
    public static StatusBarModel GlobalStatus { get; set; }
}

然后,只要你想改变它,你就可以

Globals.GlobalStatus.Status = "something";
Globals.GlobalStatus.P_Value = 14;

这是否满足您的需求?

有多种方法可以满足您的要求。正如@bitclicker 所说,您可以使用 static class 来保持其价值。但我认为 使它成为静态的class 太多了,因为那个变量值可能只使用两个viewmodel

我建议你在两个视图模型之间进行通信。您会发现 Prism 的 event aggregator 或者您可以实现自己的事件发布-订阅模型。制作您自己的事件发布-订阅模型将帮助您迈出进入 design pattern.

的第一步