我正在尝试弄清楚 MVVM 和 WPF,我想测试一些简单的代码以掌握它。
我以前做过这个,所以我认为这不会是个问题,但我为此失去了理智。
这不是完整的代码,但我已经针对特定问题对其进行了调低
我有一个模型
private string _btnName;
public string BtnName { get {return _btnName;} set{ _btnName = value; } }
我的 View 模型是这样的
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
是我的 Model 类。
当我点击按钮时,它会进入我的功能并确实“更改”名称,但在 View 中按钮仍将具有旧内容。这意味着它不会更新。
我不明白为什么。
- 为什么我的按钮不更新内容文本?
- 我的 ViewModel 中应该有属性吗?
最佳答案
您必须在您的 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"); } }
关于c# - 我的属性(property)是否更新了我的领域,或者我是否错误地使用了 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43116949/