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

tro*_*oda 1 .net c# wpf mvvm

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

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

这不是完整的代码,但我已经根据具体问题对其进行了调整

我有一个模特

private string _btnName;
public string BtnName { get {return _btnName;} set{ _btnName = value; } }
Run Code Online (Sandbox Code Playgroud)

我的视图模型就像这样

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

Public void ChangeName(object a){ BtnName = "test"; }
Run Code Online (Sandbox Code Playgroud)

和这样的观点

<Button Content={Binding MV.BtnName} Command={Binding MV.ChangeButtonName}/>
Run Code Online (Sandbox Code Playgroud)

MV我的ViewModel类在哪里,model是我的模型类.

当我点击按钮它进入我的功能并确实"更改"名称,但在视图上按钮仍将具有旧内容.这意味着它不会更新.

我不明白为什么.

  • 为什么我的按钮没有更新内容文本?
  • 我应该在ViewModel中拥有属性吗?

Mig*_*oom 5

您必须INotifyPropertyChanged在ViewModel中实现.

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));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并且您必须更改您的属性以在更新属性时通知您的View.

private string _btnName;
public string BtnName { get { return _btnName; } set { _btnName = value; OnPropertyChanged("BtnName"); } }
Run Code Online (Sandbox Code Playgroud)