一尘不染

数据绑定似乎没有刷新

c#

由于某种原因,我真的为此感到挣扎。我是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}" />

阅读 280

收藏
2020-05-19

共1个答案

一尘不染

在您的课程上实现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");
              }
        }
    }

}
2020-05-19