4

XAML を使用せずに C# で MultiBindings を直接実装する必要があります。C# で IMultiValueConverter を使用する方法は知っていますが、その方法は次のとおりです。

<MultiBinding Converter="{StaticResource sumConverter}">
  <Binding ElementName="FirstSlider" Path="Value" />
  <Binding ElementName="SecondSlider" Path="Value" />
  <Binding ElementName="ThirdSlider" Path="Value" />
</MultiBinding>

C#で?

4

2 に答える 2

4

なぜ XAML を使用しないのですか?

次のコードが機能するはずです。

MultiBinding multiBinding = new MultiBinding();

multiBinding.Converter = converter;

multiBinding.Bindings.Add(new Binding
{
    ElementName = "FirstSlider",
    Path = new PropertyPath("Value")
});
multiBinding.Bindings.Add(new Binding
{
    ElementName = "SecondSlider",
    Path = new PropertyPath("Value")
});
multiBinding.Bindings.Add(new Binding
{
    ElementName = "ThirdSlider",
    Path = new PropertyPath("Value")
});
于 2010-03-01T08:51:54.230 に答える
0

これを C# 側に行うには 2 つの方法があります (MultiBinding を文字通りコード ビハインドに移植したくないだけだと思います。そうする場合、これは本当に無駄な作業です。XAML は常にそのための優れた方法です)。

  1. 簡単な方法は、3 つのスライダーの ValueChanged イベント ハンドラーを作成し、そこで合計を計算して、必要なプロパティに割り当てることです。

2. WPF でこれらにアプローチする 2 番目の最良の方法は、アプリケーションを MVVM スタイルにすることです (MVVM について知っていることを願っています)。ViewModel クラスには、3 つの異なるプロパティがあります。また、クラスにも別の「Sum」プロパティが必要です。Sum は、他の 3 つのプロパティ セッターが呼び出されるたびに再評価されます。

public double Value1
 {
     get { return _value1;}
     set { _value1 = value;  RaisePropertyChanged("Value1"); ClaculateSum(); }
 }
 public double Sum
 {
     get { return _sum;}
     set { _sum= value;  RaisePropertyChanged("Sum"); }
 }
 public void CalculateSum()
 {
   Sum = Value1+Value2+Value3;
 }
于 2010-03-01T08:52:14.423 に答える