【发布时间】:2010-12-08 01:39:48
【问题描述】:
我在 WPF 中创建了一个自定义控件,但无法正确绑定它。如果我在后面的代码中明确设置属性的值,一切正常。
这是我控制的TextBox 的 XAML:
<TextBox Name="txtText" Grid.Row="0" Grid.Column="0" IsReadOnly="True" Text="{Binding Text, Mode=OneWay}" />
而后面代码中的相关属性如下:
public static readonly DependencyProperty TextConverterProperty = DependencyProperty.Register("TextConverter", typeof(IValueConverter), typeof(Selector));
public static readonly DependencyProperty EntityIdProperty = DependencyProperty.Register("EntityId", typeof(long), typeof(Selector));
public string Text
{
get
{
string result = this.EntityId.ToString();
if (this.TextConverter != null)
{
result = this.TextConverter.Convert(result, null, null, null) as string;
}
return result;
}
}
public long EntityId
{
get
{
return (long)this.GetValue(EntityIdProperty);
}
set
{
this.SetValue(EntityIdProperty, value);
this.OnPropertyChanged("Text");
this.OnPropertyChanged("EntityId");
}
}
public IValueConverter TextConverter
{
get
{
return this.GetValue(TextConverterProperty) as IValueConverter;
}
set
{
this.SetValue(TextConverterProperty, value);
}
}
现在我的页面中的 XAML 实现:
<controls:Selector x:Name="txtReferringCase" EntityId="{Binding ReferringDACaseId}" TextConverter="{StaticResource daCaseNumberConverter}" Grid.Column="5" Grid.Row="0" Grid.ColumnSpan="3" ButtonClicked="txtReferringCase_ButtonClicked" />
现在是奇怪的部分。我可以为页面设置 DataContext 并且没有任何反应,但是当我取消注释注释行时,文本会毫无问题地显示在我的用户控件中:
_caseScreen = new DACaseScreen(itemId);
this.DataContext = _caseScreen;
//this.txtReferringCase.EntityId = _caseScreen.ReferringDACaseId;
编辑:我忘记提及的另一件事...如果我遇到断点并检查控件的 EntityId 和 Text 属性,它们都会显示我期望的值。用户界面似乎没有更新。
【问题讨论】:
-
更改
DataContext后会发生什么?
标签: wpf binding user-controls