我正在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的东西,但不知道是什么。
答案 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");
(与说明相同)。
请注意,我仍然在猜测发生了什么 - 发布更多代码,如果事实证明这不是问题。