Uwielbiam WPF’a. Uważam, że w tej technologii brzmi wielki potencjał, który z czasem ujawni się i skłoni więcej firm to zainteresowania się tą technologią. Im więcej jednak w niej siedzę tym więcej pojawia się rzeczy które sprawiają, że zatrzymuję się na chwilę i próbuję dociec czemu tak ktoś daną rzecz zrobił. Ostatnio miałem takie przejście z Bindingiem.
Prosty przykład
Chciałem sobie zbindować przycisk, ale tak aby wartość była otoczona dodatkowym tekstem. Oczywiście WPF pozwala nam na to za pomocą StringFormat. Napisałem więc taki kawałek kodu:
<Button Content=”{Binding Text, StringFormat=Wartość: {0}, Mode=OneWay}” />
Oczywiście DataContext odpowiednio został ustawiony. Uruchamiam no i nie działa. To znaczy wartość się pojawia, ale już tekst “Wartość: “ – nie. Co jest pomyślałem. Szybka weryfikacja z MSDN’em i wygląda na to, że poprawnie wszystko jest napisane. Spróbowałem jeszcze z inną kontrolką:
<TextBlock Text=”{Binding Text, StringFormat=Wartość: {0}, Mode=OneWay}” />
Zmieniłem Button na TextBlock oraz właściwość Content na Text. Uruchamiam no i działa. Magia? Nie. Okazuje się, że StringFormat nie działa dla pola Content. Najciekawsze, że MSDN nic o tym nie wspomina przy opisie tej właściwości bindingu. Co należy zrobić aby mieć taką samą możliwość formatowania dla właściwości Content? Należy posłużyć się właściwością ContentStringFormat na danym obiekcie a nie w Bindingu. Nie bardzo rozumiem czemu zostało to tak rozróżnione przez to muszę się zastanawiać czy zmieniając pole Bindowania nie muszę zmienić także miejsca gdzie ustawiam format. Nie wiem może są za tym jakieś większe przesłanki ale jak dla mnie wygląda to jak niedogadanie się co do części funkcjonalności WPF’a.
Cóż trzeba z tym żyć. Może w wersji 4 zostało to naprawione? Nie miałem okazji sprawdzić – może ktoś wie?
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl