数据绑定到自己没有代码

时间:2010-06-17 19:26:00

标签: wpf binding

我正在WPF中构建一个UserControl。该控件有两个属性,标题和描述,我想绑定到两个文本块。看起来很简单,我让它工作,但我很好奇。为了让它工作,我不得不添加这段代码:

    void CommandBlock_Loaded(object sender, RoutedEventArgs e)
    {
        this.DataContext = this; 
    }

我的绑定看起来像这样:

        <TextBlock  Text="{Binding Title}" Width="100" ...  />
        <TextBlock  Text="{Binding Description}" Width="100" ... />

我想知道的是,如果没有this.DataContext = this;而无法使用DataContext="{Binding RelativeSource={RelativeSource Self}}"(在标记的UserControl元素中),我怎么能无法工作?我确定我错过了一些关于DataContexts的东西,但不知道是什么。

1 个答案:

答案 0 :(得分:1)

“无法让它发挥作用”是什么意思?您收到绑定错误,或者未填充预期的文本?

假设后者,如果我不得不猜测,那么在初始化控件之后将会填充Title和Description属性,并且不会触发PropertyChanged事件。

评论后更新

您不需要依赖属性,您只需要实现INotifyProperyChanged。如果在更新属性之前发生初始绑定,则需要在更新发生时通知视图。

让您的控件实现INotifyPropertyChanged并添加以下内容:

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string name)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(name));
        }
    }

然后在标题更新之后:

OnPropertyChanged("Title");

(与说明相同)。

请注意,我仍然在猜测发生了什么 - 发布更多代码,如果事实证明这不是问题。