由于某种原因,我真的为此感到挣扎。我是wpf的新手,似乎无法找到了解此简单问题所需的信息。
我试图将文本框绑定到字符串,即程序活动的输出。我为字符串创建了一个属性,但是当属性更改时,文本框没有更改。我在列表视图中遇到了这个问题,但是创建了一个刷新列表视图的调度程序。
我必须遗漏一些要点,因为我认为使用wpf的好处之一是不必手动更新控件。我希望有人可以向我发送正确的方向。
在windowMain.xaml.cs中
private string debugLogText = "initial value"; public String debugLog { get { return debugLogText; } set { debugLogText = value; } }
在windowMain.xaml中
x:Name="wndowMain" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" DataContext="{Binding RelativeSource={RelativeSource Self}}" <TextBox Name="txtDebug" Text="{Binding ElementName=wndowMain, Path=debugLog}" />
在您的课程上实现INotifyPropertyChanged。如果您有许多需要此接口的类,那么我经常发现使用如下所示的基类会有所帮助。
public abstract class ObservableObject : INotifyPropertyChanged { protected ObservableObject( ) { } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged( PropertyChangedEventArgs e ) { var handler = PropertyChanged; if ( handler != null ) { handler( this, e ); } } protected void OnPropertyChanged( string propertyName ) { OnPropertyChanged( new PropertyChangedEventArgs( propertyName ) ); } }
然后,只需确保在属性值更改时引发PropertyChanged事件。例如:
public class Person : ObservableObject { private string name; public string Name { get { return name; } set { if ( value != name ) { name = value; OnPropertyChanged("Name"); } } } }