WPF MultiBindings - PullRequest
       6

WPF MultiBindings

4 голосов
/ 01 марта 2010

Мне нужно реализовать MultiBindings в C # напрямую, без использования XAML, я знаю, как использовать IMultiValueConverter в C #, но как это сделать:

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

в C #?

Ответы [ 2 ]

4 голосов
/ 01 марта 2010

Почему бы не использовать 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")
});
0 голосов
/ 01 марта 2010

Есть два способа сделать это на стороне C # (я предполагаю, что вы просто не хотите буквально переносить MultiBinding на код, что на самом деле бесполезно, если вы делаете это, XAML всегда лучше для этого) 1001 *

  1. Простой способ - создать обработчик события ValueChanged для 3 ползунков, рассчитать сумму и присвоить требуемое свойство.

2. Второй и лучший способ приблизиться к ним в WPF - создать стиль приложения MVVM (надеюсь, вы знаете о MVVM). В вашем классе ViewModel у вас будет 3 разных свойства. И вам нужно другое свойство '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;
 }
...