WPF MultiBindings

时间:2010-03-01 08:37:44

标签: c# wpf multibinding

我需要在不使用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#中

2 个答案:

答案 0 :(得分: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")
});

答案 1 :(得分:0)

你有两种方法可以做到这一点到C#侧(我假设你只是不想将MultiBinding直接移植到代码后面,如果你这样做,那真是一个毫无价值的努力,XAML总是更好)< / p>

  1. 简单的方法是为3个滑块创建ValueChanged事件处理程序并计算其中的总和并分配给所需的属性。
  2. 2。其次,在WPF中处理这些问题的最佳方法是使应用程序成为MVVM风格。(我希望你知道MVVM)。在ViewModel类中,您将拥有3个不同的属性。而且你在课堂上还需要另一个'Sum'属性。每当调用其他3个属性设置器时,将重新评估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;
     }