通过代码更新IValueConverter

时间:2010-10-29 15:51:56

标签: wpf

我正在试图弄清楚是否可以通过后面的代码更新IValueConverter。

我的情况是我有两个ComboBox。更新第一个后,我将第二个的ItemsSource属性更改为各种枚举之一。我从CodeProject中获取了一个EnumToFriendlyNameConverter,但我不确定如何设置它。

如果我在ItemsSource中设置转换器(见下文),那么当我下次设置项目源时它会被忽略。

ItemsSource="{Binding Converter={StaticResource enumItemsConverter}}"

我发现使用ItemTemplate是可能的,但我必须手动放置一个标签,然后该标签与我的其他组合框具有不同的风格。获得正确的样式似乎需要做很多工作......

1 个答案:

答案 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;
}