2010-10-20 4 views
4

Я пытаюсь сохранить чужой код прямо сейчас, когда этот человек является экспертом WPF. Я, с другой стороны, нет. :)WPF IValueConverter - преобразование нескольких значений в одно значение

В коде используется IValueConverter для преобразования перечисления состояний в логическое значение, которое определяет, отображается ли на экране UserControl или нет.

Я обнаружил недостаток, что одного перечисления в этом обстоятельстве недостаточно, на самом деле есть еще одно логическое значение, которое необходимо учитывать. Есть ли другой объект, который можно было бы использовать, чтобы взять 2 элемента в качестве аргументов для преобразования? (Параметр «преобразователь» уже используется.)

Примером может служить следующий пример.

Логика существующего кода говорит ...

If it's sunny, go to work. 
If it's raining, don't go to work. 

мне нужно взять другую вещь во внимание, которое сделало бы его следующим образом.

If it's sunny and you're wearing pants, go to work. 
If it's sunny and you're not wearing pants, don't go to work. 
If it's raining and you're wearing pants, don't go to work. 
If it's raining and you're not wearing pants, don't go to work. 

IValueConverter, который будет выполнять преобразование только позволяет мне взять одну «вещь» в конверсии.

Любая помощь приветствуется. Спасибо,

MJ

ответ

14

Используйте IMultiValueConverter

public class MyMultiValueConverter: IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     // Do something with the values array. It will contain your parameters 
    } 

    public object[] ConvertBack(object values, Type[] targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Вы также должны использовать MultiBinding в XAML вместо обычного связывания

<MultiBinding Converter="{StaticResource MyMultiValueConverterKey}"> 
    <Binding Path="Value1" /> 
    <Binding Path="Value2" /> 
</MultiBinding> 
+0

Спасибо! Я сейчас пытаюсь. mj –

+0

У меня вопрос. Как включить/отключить кнопку на основе непустых значений двух текстовых полей на странице? Я могу использовать стили, IMultivalueConvertor, но что, если количество текстовых полей продолжает меняться/увеличиваться. Есть ли способ динамически контролировать, чтобы проверить поведение кнопки? Вы хотите, чтобы я задал для этого отдельный вопрос. – Vikram

+1

@ Vikram Отдельный вопрос будет лучшим. Скорее всего, вы захотите настроить CanExecuteCommand, чтобы он проверял значение всех связанных полей и возвращал true только в том случае, если все они имеют значение. – Rachel

Смежные вопросы