-1

我正在使用 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 中拥有的不同模型。

我需要为转换返回做什么?我不知道如何判断该值属于返回数组中的哪个元素。有任何想法吗?

4

1 回答 1

1

使用 aMultiValueConverter对我来说似乎是滥用,你不使用所有输入,你只选择一个,一个正常的ValueConverter,它接受这 4 个对象ConverterParameter可能更有意义,这样你就不需要在ConvertBack.

除此之外,这在ConvertBack逻辑上是不可能的。您绑定到IsChecked哪个是布尔值/可空布尔值,为您提供两个或三个状态,而您的输入有四个状态(不同类型),因此您的转换函数从四个值映射到两个或三个。不可能有反函数。

于 2011-03-10T20:35:10.510 回答