Domanda
Ho bisogno di attuare MultiBindings in C # direttamente senza l'utilizzo di XAML, io so come usare l'IMultiValueConverter in C #, ma, come fare:
<MultiBinding Converter="{StaticResource sumConverter}">
<Binding ElementName="FirstSlider" Path="Value" />
<Binding ElementName="SecondSlider" Path="Value" />
<Binding ElementName="ThirdSlider" Path="Value" />
</MultiBinding>
in C #?
Soluzione
Perché non usare XAML?
Il seguente codice dovrebbe funzionare:
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")
});
Altri suggerimenti
Ci sono due modi si può fare questo per C # lato (io parto dal presupposto basta non vuole letteralmente porta il MultiBinding al codice dietro, che è davvero uno sforzo inutile se lo fate, XAML è sempre meglio per questo)
- modo semplice è quello di rendere gestore di eventi ValueChanged per 3 cursori e calcolare la somma lì e assegnare alla proprietà richiesta.
2. In secondo luogo e il modo migliore per affrontare questi in WPF è quello di rendere lo stile dell'applicazione MVVM. (Spero siete a conoscenza di MVVM). Nella classe ViewModel avrete 3 diverse proprietà. E avete bisogno di un altro immobile 'Sum' anche nella classe. Al vertice sarà ottenere rivalutato ogni volta che l'altro setter 3 proprietà viene chiamato.
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;
}