Проблема IMultiValueConverter ConvertBack - PullRequest
0 голосов
/ 10 марта 2011

Я использую wpf + mvvm и пытаюсь реализовать условный преобразователь. Вот что я делаю в xaml:

                <CheckBox.IsChecked>
                    <MultiBinding Converter="{StaticResource pageSourceConverter}">
                        <Binding Path="CurrentPage.Source"/>
                        <Binding Path="Project.Type1.MachineTypes.Rotating"/>
                        <Binding Path="Project.Type2.MachineTypes.Rotating" />
                        <Binding Path="Project.Type3.MachineTypes.Rotating" />
                        <Binding Path="Project.Type4.MachineTypes.Rotating" />
                    </MultiBinding>
                </CheckBox.IsChecked>

и мультиконвертер:

public class PageSourceConverter : IMultiValueConverter

  {
      public object Convert(object[] values, Type targetType, object parameter,          CultureInfo culture)
      {

          String pageSource = values[0] as String;

          if (pageSource == "Type1")
              return values[1];
          else if (pageSource == "Type2")
              return values[2];
          else if (pageSource == "Type3")
              return values[3];
          else if (pageSource == "Type4")
              return values[4];
          else
              return null;
     }

     public object[] ConvertBack(object value, Type[] targetType, object parameter, CultureInfo culture)
     {
         return null;
     }
 }

Итак, я хочу условно привязать элемент на странице к разным моделям, которые есть в viewController, в зависимости от типа страницы, на которой находится пользователь.

Что мне нужно сделать для конвертации? Я не знаю, как определить, к какому элементу в возвращаемом массиве принадлежит значение. Есть идеи?

1 Ответ

1 голос
/ 10 марта 2011

Использование MultiValueConverter для меня выглядит как оскорбление, вы не используете все свои входные данные, вы просто выбираете один, обычный ValueConverter, который принимает эти 4 объекта, поскольку ConverterParameter, вероятно, будет иметь больше смысла, чтоТаким образом, вам не нужно возвращать значения для них в ConvertBack.

Кроме того, ConvertBack логически невозможно.Вы связываетесь с IsChecked, который является логическим / nullable-boolean, давая вам два или три состояния, в то время как ваш вход имеет четыре состояния (разные типы), поэтому ваша функция преобразования отображается из четырех значений в два или три.Для этого не может быть обратной функции.

...