我正在试图弄清楚是否可以通过后面的代码更新IValueConverter。
我的情况是我有两个ComboBox。更新第一个后,我将第二个的ItemsSource属性更改为各种枚举之一。我从CodeProject中获取了一个EnumToFriendlyNameConverter,但我不确定如何设置它。
如果我在ItemsSource中设置转换器(见下文),那么当我下次设置项目源时它会被忽略。
ItemsSource="{Binding Converter={StaticResource enumItemsConverter}}"
我发现使用ItemTemplate是可能的,但我必须手动放置一个标签,然后该标签与我的其他组合框具有不同的风格。获得正确的样式似乎需要做很多工作......
答案 0 :(得分:2)
当您更改ItemsSource时,您只需再次应用转换器或修改ItemsSource而不是替换它。
e.g。创建一个新的绑定:
private void ChangeItemsSouce(IEnumerable newItems)
{
Binding binding = new Binding();
binding.Source = newItems;
binding.Converter = new EnumToFriendlyNameConverter();
comboBox.SetBinding(ComboBox.ItemsSourceProperty, binding);
}
或修改现有绑定:
private void ChangeItemsSouce(IEnumerable newItems)
{
var binding = comboBox.GetBindingExpression(ComboBox.ItemsSourceProperty);
binding.ParentBinding.Source = newItems;
}