c# WPF MVVM文本框的值不会改变
本文关键字:改变 WPF MVVM 文本 | 更新日期: 2023-09-27 18:05:06
我是一个在WPF中使用MVVM的初学者,发现似乎不可能改变文本框或标签的值。下面是一个例子。
在Xaml:Name原值为"Peter"。
但是当我按下一个按钮调用ViewModel中的命令并将Name的值更改为"约翰"。因此,假设文本框的值也将更改为John。但是,它不会改变。
我在网上找到了很多例子,发现它们都没有实现这种功能。我从他们那里学到的是使用命令和列表视图的ItemsSource。当我使用按钮来引发命令来改变视图的ItemsSource时,ListView的值将会改变。当绑定到ItemsSource时,它的值会自动改变。
但是,我不能改变TextBox或Label的值,即使它们的绑定值已经改变了。
实际上,我在MVVM真的很年轻。我觉得我还有很多不知道的事情。你能给我一个例子,我到底应该怎么做,使更改文本框后,一个按钮单击?顺便说一下,我不太确定如何为按钮制作命令。它似乎涉及到很多代码,我从网上找到的样本。有没有更简单的方法?
您的ViewModel需要实现INotifyPropertyChanged
。文档见这里
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));
}
}
您的视图模型应该实现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");
}
}
}
}