Я создал пользовательский элемент управления в WPF, и у меня возникают проблемы с его привязкой. Если я явно установлю значение свойства в коде, то все будет работать нормально.
Вот XAML для TextBox
в моем контроле:
<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 элемента управления, они оба показывают значения, которые я ожидал. Похоже, пользовательский интерфейс просто не обновляется.