Обновление IValueConverter через код - PullRequest
0 голосов
/ 29 октября 2010

Я пытаюсь выяснить, возможно ли обновить IValueConverter с помощью кода позади.

Моя ситуация такова, что у меня есть два ComboBox. После обновления первого я изменяю свойство ItemsSource второго на одно из множества перечислений. Я взял EnumToFriendlyNameConverter из CodeProject, но я не уверен, как его установить.

Если я установлю конвертер в ItemsSource (см. Ниже), он будет проигнорирован, когда я в следующий раз установлю источник элементов.

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

Я обнаружил, что это возможно с помощью ItemTemplate, но затем мне нужно вручную поместить метку, которая затем имеет стиль, отличный от моего другого комбинированного списка. Правильный выбор стилей кажется большой работой ...

1 Ответ

2 голосов
/ 04 мая 2011

Когда вы изменяете ItemsSource, вам просто нужно снова применить конвертер или изменить ItemsSource вместо его замены.

например. создать новую привязку:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...