Ich hatte schon vor einiger Zeit gezeigt (puh, schon wieder 1 1/2 Jahre her..) , wie man im XAML ein MultiBinding implementiert. Nun stand ich vor einem Problem, das ich im XAML ein paar Elemente definiere und im Code weitere Elemente zur Laufzeit hinzufüge. Diese Elemente wollte ich nun vernünftig zusammenbringen.

Im Code benötige ich eine Slider-Property und eine Property Namens „Caption“, welche einen Text halten soll. Im Xaml habe ich ein TextBlock-Element, welcher den Inhalt der Caption-Property und den aktuellen Wert des Sliders anzeigen soll.

1
2
public string Caption { get; set; }
public Slider Slider { get; set; }
1
<TextBlock Grid.ColumnSpan="3" Name="CaptionTxtBlock" />

Der Slider, welcher von aussen gesetzt wird, bekommt im „Loading“ noch ein paar Eigenschaften und die Position im UserControl mit:

1
2
3
4
Slider.Name = "slider";
Slider.SetValue(Grid.RowProperty, 1);
Slider.SetValue(Grid.ColumnProperty, 1);
SliderGrid.Children.Add(Slider);

Anschliessend baue ich mir ein MultiBinding-Objekt, dass nun die beiden benötigen Properties an meiner TextProperty des TextBlockes bindet und entsprechend formatiert ausgibt:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
MultiBinding mb = new MultiBinding()
{
    Mode = BindingMode.TwoWay,
    UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged,
    StringFormat = "{0} ({1:00} %)"
};
 
Binding sliderBinding = new Binding()
{
    Source = Slider,
    Path = new PropertyPath("Value")
};
 
Binding captionBinding = new Binding()
{
    Source = this,
    Path = new PropertyPath("Caption")
};
 
mb.Bindings.Add(captionBinding);
mb.Bindings.Add(sliderBinding);
 
BindingOperations.SetBinding(CaptionTxtBlock, TextBlock.TextProperty, mb);

Und so sieht das ganze dann aus:

Download Code

Viel Spaß beim entwickeln : )

MultiBinding die Zweite
Markiert in: