按钮单击时WPF中的数据绑定

时间:2011-08-07 08:52:47

标签: c# wpf data-binding

我正在尝试实现数据绑定,并且在点击某个按钮后让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 个答案:

答案 0 :(得分:3)

您应该在INotifyPropertyChanged中实施SearchClass,然后在setter中提升事件:

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

如果我理解正确,SearchClass是您DataContext的{​​{1}}。在这种情况下,如上所述实施将有所帮助。

当WPF将某个类视为Binding的源时 - 它会尝试将其强制转换为TextBlock并订阅INotifyPropertyChanged事件。当引发事件时 - WPF更新与发送者关联的绑定(PropertyChanged的第一个参数)。它是使绑定工作顺利进行的主要机制。

答案 1 :(得分:1)

您必须在SearchClass类上实现INotifyPropertyChanged接口。这是粘合剂值通知其源值已更改的方式。它显示“111”值,因为它尚未布置(或多或少),但在此之后将不会更新,直到您实现该接口为止。