Igor Kulman

Ako na konvertory vo Windows Phone 7

· Igor Kulman

Silverlight a teda aj Windows Phone 7 obsahujú možnosť použiť pri bindingoch konvertory, pomocou ktorých si môžete ušetriť veľa práce, ak ich viete správne používať. Konvertor si môžete predstaviť ako triedu, ktorej úlohou je previesť vlastnosť vášho viewmodelu na typ, ktoré potrebujete použiť pri nejakej komponente. Asi najlepším príkladom je prevod typu bool na typ Visibility. Ak máte na svojom viewmodeli vlastnosť typu bool a chcete na základe nej zobraziť alebo nezobraziť nejaký vizuálny prvok, nemôžete túto vlasnosť použiť priamo, pretože viditeľnosť UI elementov je typu Visibility. Ideálnym riešením je vytvoriť si konvertor.

Každý konvertor musí implementovať rozhranie IValueConverter a teda dve metódy: Convert a ConvertBack. Na konverziu z vlastnosti viewmodelu na vlastnosť UI elementu sa používa metóda Convert, ktorej implementácia môže v spomínanom príklade vyzerať následovne:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{
  var isVisible = (bool)value;
  return isVisible ? Visibility.Visible : Visibility.Collapsed;
}
Na konverziu opačným smerom sa používa metóda ConvertBack:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{
  var visiblity = (Visibility)value;
  return visiblity == Visibility.Visible;
}

Každý konvertor je pred použitím potrebné zaregistrovať ako StaticResouce

<phone:PhoneApplicationPage.Resources>
  <local:BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</phone:PhoneApplicationPage.Resources>

kde local je referencia na namespace, v ktorom sa daný konvertor nachádza. Samotné použitie konvertora je už jednoduché:

<TextBlock Visibility="{Binding IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}" ... />