<TextBox Text="{Binding SomeText, StringFormat='Moj text: {0}'}"/>
<TextBox Text="{Binding SomeText, StringFormat='Moj text: \{0\}'}"/>
<TextBox>
<TextBox.Text>
<Binding Path="SomeText" StringFormat="{}Moj text: {0}"/>
</TextBox.Text>
</TextBox>
Wszystkie powyższe zapisy zwrócą ten sam rezultat:
Moj text: SomeTextValue
Tak jak widać w powyższym przykładzie, w przypadku dłuższego zapisu bindingu musimy przed naszym stringiem umieścić puste nawiasy {}. Poza tym w skróconym zapisie możemy użyć ukośnika przed nawiasem, jednak nie jest to konieczne.
Istnieje też możliwość podłączenia kilku wartości które sformatujemy. W takim wypadku musimy wykorzystać MultiBinding. Różni się on tym od zwykłego Bindingu, że możemy podłączyć kilka właściwości źródłowych, które zostaną za pomocą StringFormat scalone w jeden string.
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="czas1: {0} czas2: {1} czas3: {2}">
<Binding Path="Time1"/>
<Binding Path="Time2"/>
<Binding Path="Time3"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Co więcej możemy sformatować daną wartość za pomocą mechanizmu zdefiniowanego w Frameworku lub napisanym przez nas. Stosując zapis:
<TextBox Text="{Binding SomeText, StringFormat='Moj text: {0:hogan}'}"/>
tak naprawdę wywołujemy na pierwszym obiekcie SomeText metodę:
ToString(string format, IFormatProvider formatProvider)
interfejsu IFormattable z parametrem format = hogan. Takie typy jak Double czy DateTime implementują ten intefejs i mają zdefiniowane różne sposoby formatowania, dlatego łatwo nam manipulować całym zapisem. Możemy oczywiście w naszej klasie sami zaimplementować IFormattable.
<TextBox Text="{Binding Time, StringFormat=HH}"/>
<TextBox Text="{Binding Time, StringFormat=Time: {0:HH}}"/>
<TextBox Text="{Binding Time, StringFormat=Time: \{0:HH\}}"/>
<TextBox>
<TextBox.Text>
<Binding Path="Time" StringFormat="{}Time: {0:HH}"/>
</TextBox.Text>
</TextBox>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="czas1: {0:HH} czas2: {1:HH:mm} czas3: {2:HH:mm:ss}">
<Binding Path="Time1"/>
<Binding Path="Time2"/>
<Binding Path="Time3"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Tak jak widzimy w pierwszym przykładzie, jeżeli bindujemy jedną property, możemy wtedy podać do StringFormat po prostu sam parametr metody ToString.
0 komentarze:
Prześlij komentarz