2010-07-07 1 views
7

Mamy dynamiczny system językowy, który nie korzysta z konwencjonalnych plików zasobów; pobieranie zasobów z bazy danych za pośrednictwem biblioteki menedżera języków. W oparciu o starsze rozwiązanie (VB6), języki sterują zgodnie z nazwą zasobu we właściwości znacznika kontrolki. Po zainicjowaniu strony uruchamiamy metodę, która pobiera LayoutRoot i rekursuje, że dzieci stosują łańcuchy wyszukiwane ze znacznika, w którym znajduje się kontrolka. To okazuje się być nieporęczne, procedura rekursywna zmieniła się w potwora, aby zaspokoić subtelności różnych kontrolek i chcę zmienić na używanie wiązania danych, aby zastosować łańcuchy.Czy jest możliwe powiązanie danych z metodą w Silverlight?

Zdaję sobie sprawę, że mógłbym zadeklarować właściwości, które będą wiązały się z każdą kontrolą, ale będzie to wymagało dużo kodu i mam nadzieję, że jest lepszy sposób. Czy istnieje sposób na powiązanie z metodą, przekazanie parametru. Przewiduję metodę taką jak ta.

public string GetResource(string resourceName) 
{ 
    string resource = <fetch resource from language manager>; 

    if (String.IsNullOrEmpty(resource)) 
    { 
    return resourceName; 
    } 
    else 
    { 
    return resource; 
    } 
} 

Mamy już metodę statyczną w naszej aplikacji do tego wyszukiwania, która ma następujący podpis.

public static Resource(string resourceName, string defaultValue) 

Aby móc używać tego bezpośrednio, byłoby świetnie.

+2

Czy użyłeś właśnie "języka" jako czasownika? * drżenie * –

+0

Zrobiłem i uznaję to za niewłaściwe użycie języka. Jaki czasownik poleciłbyś? Tłumaczenie nie pasuje do tego, co opisuję. –

+0

"inicjuje", "tłumaczy", "stosuje zasoby do" –

Odpowiedz

4

Można użyć parametru value converter, a następnie przekazać do niego parametr w celu wyszukania zasobów. Niekoniecznie ma znaczenie właściwość, do której doprowadziło połączenie, ponieważ konwerter wartości mógł zignorować tę część i po prostu użyć przekazanego ConverterParameter, aby wykonać wyszukiwanie zasobów.

Następnie można utworzyć wystąpienie konwertera zasobów w zasobach aplikacji i używać go w całej aplikacji.

... SomeProperty="{Binding Converter={StaticResource MyAppResourceConverter}, 
          ConverterParameter=SomePropertyResourceName}}" ... 
+1

Działa to całkiem dobrze, dzięki. –

+0

@Steve: Bez problemu. Musiałem zrobić coś podobnego (nie zasoby) i potknąłem się o to bezczelne podejście. :) –