C#WPF MVVM TextBox值不会改变

时间:2011-08-11 08:44:29

标签: c# wpf mvvm textbox

我是WPF中使用MVVM的初学者,发现似乎无法更改文本框或标签的值。这是一个例子。

在Xaml中:

Name的原始值是“Peter”。

但是在我按下一个在ViewModel中调用命令的按钮并将Name的值更改为 “约翰”。因此,假设文本框的值也将更改为John。但是,它没有改变。

我在网上找到了很多例子,发现它们都没有实现这种功能。我从他们那里学到的是使用ListView的Command和ItemsSource。 当我使用button来引发命令来更改视图的ItemsSource时,ListView的值将会改变。当Binding to ItemsSource发生更改时,其值将自动更改。

但是,即使更改了它们的绑定值,我也无法使TextBox或Label的值发生变化。

实际上,我在MVVM中还很年轻。我想我还有很多,我不知道。 你能举个例子说明按钮点击后如何更改文本框吗?顺便说一句,我不太确定如何为按钮命令。它似乎涉及我在网上的样本中找到的那么多代码。有简单的方法吗?

非常感谢。

2 个答案:

答案 0 :(得分:3)

您的ViewModel需要实现INotifyPropertyChanged。 文档见here

public class Bar : INotifyPropertyChanged
{
  public event PropertyChangedEventHandler PropertyChanged;
  private string foo;
  public string Foo 
  {
    get { return this.foo; }
    set 
    { 
      if(value==this.foo) 
        return;
      this.foo = value;
      this.OnPropertyChanged("Foo");
    }
  }
  private void OnPropertyChanged(string propertyName)
  {
    if(this.PropertyChanged!=null)
      this.PropertyChanged(this,new PropertyChangedEventArgs(propertyName));
  }  
}

答案 1 :(得分:1)

您的视图模型应该实现INotifyPropertyChanged,以便WPF知道您已更改了属性的值。

以下是

的示例
// This is a simple customer class that 
// implements the IPropertyChange interface.
public class DemoCustomer  : INotifyPropertyChanged
{
    // These fields hold the values for the public properties.
    private string customerNameValue = String.Empty;

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        var listeners = PropertyChanged;
        if (listeners  != null) 
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    public string CustomerName
    {
        get
        {
            return this.customerNameValue;
        }

        set
        {
            if (value != this.customerNameValue)
            {
                this.customerNameValue = value;
                NotifyPropertyChanged("CustomerName");
            }
        }
    }
}