2010-03-01 2 views
4

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

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

в C#?

ответ

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") 
}); 
+2

Мне нужно использовать C#, поскольку я строю инспектора свойств, мне нужно, чтобы все было динамичным, насколько я вижу, C# будет более полезным, чем XAML –

0

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

  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; 
} 
Смежные вопросы