Silverlight i brak wsparcia dla x:Static

Programiści WPF z pewnością kojarzą makro x:Static służące do bindowania m.in. stałych. Bardzo przydatne jest to w przypadku gdy mamy klasę stałych, którą chcemy przypisać pewnym właściościom kontrolek. W PRISM, wykorzystuje się to do definiowania nazw regionów:

<ItemsControl regions:RegionManager.RegionName="{x:Static slbase:RegionNames.NoteView}">

Dzięki takiemu rozwiązaniu nie musze martwić się o aktualziacje nazwy regionu w pliku xaml.

Ostatnio piszę projekt w Silverlight i spotkało mnie niemiłe zaskoczenie gdy okazało się, że SL nie wspiera takiego makra. W przykładach dołączonych do frameworku PRISM autorzy na sztywno podają nazwy. Znalazłem jednak lepsze moim zdaniem rozwiązanie. Możemy uzyć zasobów a mianowicie:

<controls:TabControl cal:RegionManager.RegionName="{Binding Note, Source={StaticResource Regions}}">

W powyższym kodzie bindujemy właściwość Note do RegionName. Wszystko realizowane jest również w sposób statyczny. Wystarczy, że zdefiniujemy jeszcze w ResourceDictionary następujący znacznik:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:slbase="clr-namespace:SlBase.Mvvm;assembly=SlBase">

    <slbase:Regions x:Key="RegionsBase"/>
</ResourceDictionary>

Nie jest to rozwiązanie idealne ale wystarczające. Zasoby możemy zdefiniować w osobnym pliku i  dołączać je w ramach potrzeb co redukuje ilość kodu.

One thought on “Silverlight i brak wsparcia dla x:Static”

  1. Warto dodać, że owe rozwiązanie można bez problemu znaleźć w dokumentacji PRISM i w komentarzach w kodzie przykładów 🙂

Leave a Reply

Your email address will not be published.