-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

これに を使用するMultiValueConverterと、私には乱用のように見えます。すべての入力を使用するのではなく、1 つを選択するだけです。ValueConverterこれらの 4 つのオブジェクトを使用する法線ConverterParameterは、おそらくより理にかなっているでしょう。そうすれば、 で値を返す必要がなくなりますConvertBack

その上、ConvertBack論理的に不可能です。which はブール値/nullable-boolean にバインドしIsChecked、2 つまたは 3 つの状態を与えますが、入力には 4 つの状態 (異なる型) があるため、変換関数は 4 つの値から 2 つまたは 3 つにマップされます。その逆関数はあり得ません。

于 2011-03-10T20:35:10.510 に答える