我的属性是更新我的字段还是我错误地使用MVVM

时间:2017-03-30 11:43:50

标签: c# .net wpf mvvm

我试图找出MVVM和WPF,我想测试一些简单的代码来解决它。

之前我已经这样做了,所以我认为这不会成为一个问题,但我已经失去了理智。

这不是完整的代码,但我已经针对特定问题对其进行了调整

我有一个模特

private string _btnName;
public string BtnName { get {return _btnName;} set{ _btnName = value; } }

我的视图模型就像这样

BtnName {get { return model.BtnName;} set{ model.BtnName = value;}}
ICommand ChangeButtonName = new RelayCommand(ChangeName)

Public void ChangeName(object a){ BtnName = "test"; }

像这样的观点

<Button Content={Binding MV.BtnName} Command={Binding MV.ChangeButtonName}/>

MV是我的 ViewModel 类,而model是我的模型类。

当我点击按钮时,它会进入我的功能,并确实&#34;更改&#34;名称,但在视图上按钮仍将具有旧内容。这意味着它没有更新。

我不明白为什么。

  • 为什么我的按钮不会更新内容文字?
  • 我的ViewModel中应该有属性吗?

1 个答案:

答案 0 :(得分:5)

您必须在ViewModel中实现INotifyPropertyChanged

public class MainViewModel : INotifyPropertyChanged
{
    public RelayCommand DoSomethingCommand { get; set; }

    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }
}

您必须更改您的属性,以便在更新属性时通知您的View。

private string _btnName;
public string BtnName { get { return _btnName; } set { _btnName = value; OnPropertyChanged("BtnName"); } }