WPF IValueConverter - преобразование нескольких значений в одно значение - PullRequest
4 голосов
/ 20 октября 2010

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

Код использует 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

1 Ответ

14 голосов
/ 20 октября 2010

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