我有一个 Combobox,其 ItemTemplate 绑定到包含我的自定义标签控件之一的 DataTemplate。自定义控件所做的只是本地化分配给它的内容。
组合框(关闭时)将显示所选第一个项目的文本。但是,当所选项目更改时,闭合组合的显示将不会更新。我知道实际选定的项目已更新,因为它绑定到正确更改的属性。唯一的问题是显示文本。
因此,例如,如果我选择带有文本“项目 1”的项目,则关闭的组合框将显示“项目 1”。然后,如果我选择“项目 2”,关闭的组合框仍将显示“项目 1”。
以下是它的设置方式('Name' 是绑定在 ItemsSource 中的项目的属性):
<Grid.Resources>
<DataTemplate x:Key="MyTemplate">
<MyCustomLabel Content="{Binding Name}" />
<DataTemplate>
</Grid.Resources>
<Combobox ItemsSource="{Binding MyItems}" ItemTemplate="{StaticResource MyTemplate}" />
下面是我的标签控件的代码:
public class MyLabel : Label
{
/// <summary>
/// When reassigning content in the OnContentChanged method, this will prevent an infinite loop.
/// </summary>
private bool _overrideOnContentChanged;
protected override void OnContentChanged(object oldContent, object newContent)
{
// if this method has been called recursively (since this method assigns content)
// break out to avoid an infinite loop
if (_overrideOnContentChanged)
{
_overrideOnContentChanged = false;
return;
}
base.OnContentChanged(oldContent, newContent);
var newContentString = newContent as string;
if (newContentString != null)
{
// convert the string using localization
newContentString = LocalizationConverter.Convert(newContentString);
// override the content changed method
// will prevent infinite looping when this method causes itself to be called again
_overrideOnContentChanged = true;
Content = newContentString;
}
}
}
任何建议将不胜感激。谢谢!