2010-03-01 48 views
4

我需要實現在C#MultiBindings的情況下直接使用XAML,我知道如何使用IMultiValueConverter在C#中,但是,怎麼做:WPF MultiBindings

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

回答

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更多的幫助 – 2010-03-01 09:01:15

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