代码之家  ›  专栏  ›  技术社区  ›  jcollum

数据绑定到自身,无代码

  •  1
  • jcollum  · 技术社区  · 14 年前

    我正在WPF中构建一个用户控件。控件有两个属性,标题和说明,我希望绑定到两个文本块。看起来很直白,我让它起作用了,但我对一些事情很好奇。为了让它工作,我必须添加以下代码:

        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元素中)?我确信我遗漏了一些关于数据上下文的内容,但不知道是什么。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Phil Sandler    14 年前

    你说“不能让它工作”是什么意思?您得到一个绑定错误,或者您期望的文本没有被填充?

    假设是后者,如果我不得不猜测的话,那么标题和描述属性将在控件初始化之后被填充,并且不会触发PropertyChanged事件。

    评论后更新

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

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

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

    然后在更新标题后:

    OnPropertyChanged("Title");
    

    (与说明相同)。

    请注意,我仍然在猜测发生了什么事情——如果发现这不是问题所在,请发布更多的代码。