Привязка данных в WPF по нажатию кнопки - PullRequest
1 голос
/ 07 августа 2011

Я пытаюсь реализовать привязку данных и чтобы текст TextBox обновлялся после нажатия какой-либо кнопки.

XAML:

<TextBox  Text="{Binding Path=Output}" />

Код:

    public MainWindow()
    {
        InitializeComponent();
        DataContext = Search;
        Search.Output = "111";
    }

    public SearchClass Search = new SearchClass();


    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Search.Output = "222";
    }

    public class SearchClass
    {
        string _output;

        public string Output
        {
            get { return _output; }
            set { _output = value; }
        }
    }

Когда я запускаю программу, я вижу "111", поэтому привязка из MainWindow () работает, но если я нажимаю кнопку - текст в TextBox не обновляется (но в отладчике я вижу, что button1_Clickвыполняется и Search.Output теперь равен "222").Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 07 августа 2011

Вы должны реализовать INotifyPropertyChanged в своем SearchClass, а затем в установщике вызвать событие:

public event PropertyChangedEventHandler PropertyChanged = delegate { };
public string Output
{
    get { return _output; }
    set 
    { 
        _output = value; 
        PropertyChanged(this, new PropertyChangedEventArgs("Output")); 
    }
}

Если я правильно понял, SearchClass - это DataContext для вашего TextBlock.В этом случае поможет реализация, как описано выше.

Когда WPF видит некоторый класс в качестве источника Binding - он пытается привести его к INotifyPropertyChanged и подписаться на событие PropertyChanged.И когда возникает событие - WPF обновляет привязку, связанную с отправителем (первый аргумент PropertyChanged).Это основной механизм, обеспечивающий плавную работу переплета.

1 голос
/ 07 августа 2011

Вы должны реализовать интерфейс INotifyPropertyChanged в своем классе SearchClass. Это то, как значения связующего уведомляются, их исходные значения изменились. Он отображает значение «111», поскольку оно еще не было выложено (более или менее), но не будет обновляться после этого, пока вы не реализуете этот интерфейс.

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