【问题标题】:IMultiValueConverter ConvertBack problemIMul​​tiValueConverter ConvertBack 问题
【发布时间】:2011-03-10 19:56:48
【问题描述】:

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

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

【问题讨论】:

    标签: wpf xaml conditional multibinding imultivalueconverter


    【解决方案1】:

    为此使用MultiValueConverter 对我来说似乎是滥用,您不使用所有输入,您只需选择一个,普通的ValueConverter 将这4 个对象作为ConverterParameter 可能更有意义,即这样您就不需要在ConvertBack 中为它们返回值。

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

    【讨论】:

    • 感谢您的回复。这肯定是滥用,我想出了一种不使用 ValueConverters 来解决我的问题的方法。我脑子里放了一个严重的屁!
    • @jeremywho -1 未分享您的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2011-06-07
    • 1970-01-01
    • 2021-06-30
    • 2019-12-25
    • 1970-01-01
    相关资源
    最近更新 更多