c# - 我的属性(property)是否更新了我的领域,或者我是否错误地使用了 MVVM

标签 c# .net wpf mvvm

我正在尝试弄清楚 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/

相关文章:

c# - 根据单元测试中传递的参数返回不同的模拟值与最小起订量

.net - 如何处理所有以一个 Form 类结尾的 .NET TabPage 控件?

c# - 具有两个来源的 WPF 图像

c# - 通过更新面板更新时,在我的页面上出现两次

C# 将图像加载到 PictureBox 中而不减慢 UI

c# - 从 int 输入确定回文

wpf - MSBuild 在 C# WPF 应用程序项目上失败

c# - 如何使 Windows 商店应用程序与 TLS 1.2 一起工作?

c# - 将一些 JavaScript 转换为 JQuery

c# - 为什么我的坐标 (1,1) 从 (0, 1) 开始?