IMul​​tiValueConverter ConvertBack问题

时间:2011-03-10 19:56:48

标签: wpf xaml conditional multibinding imultivalueconverter

我正在使用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>

MultiConverter:

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 个答案:

答案 0 :(得分:1)

使用MultiValueConverter看起来像对我的滥用,你没有使用所有输入,你只需选择一个,正常ValueConverter将{4}对象作为ConverterParameter可能更有意义,这样你就不需要在ConvertBack中为它们返回值。

此外ConvertBack在逻辑上是不可能的。绑定到IsChecked这是一个布尔/可空布尔值,当你的输入有四种状态(不同类型)时,它会给你两个或三个状态,所以你的转换函数从四个值映射到两个或三个。对此不能有反函数。