WPF多绑定

4

我需要在C#中直接实现MultiBindings,而不是使用XAML。我知道如何在C#中使用IMultiValueConverter,但是如何实现:

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

在C#中?
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")
});

2
我需要使用C#,因为我正在构建属性检查器,我需要事物具有动态性,就我所见,C#比XAML更有帮助。 - Fadi Al Sayyed

0

有两种方法可以在C#中实现这个功能(我假设您不想直接将MultiBinding移植到代码后台,因为这样做真的是徒劳无功的,XAML始终更好)

  1. 简单的方法是为3个滑块创建ValueChanged事件处理程序,在那里计算总和并分配给所需属性。

2. 在WPF中处理这些的第二种也是最好的方法是采用MVVM风格的应用程序。(我希望您知道MVVM)。在您的ViewModel类中,您将拥有3个不同的属性。您还需要在类中添加另一个'Sum'属性。每当调用其他3个属性setter时,Sum都会重新评估。

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;
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接