Кажется, данные не обновляются - PullRequest
2 голосов
/ 28 мая 2009

Почему-то я действительно борюсь с этим. Я новичок в 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}" />

1 Ответ

5 голосов
/ 28 мая 2009

Реализация 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");
              }
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...