2011-07-22 18 views
9

Mam stałą ciąg znaków, które muszę ponownie użyć w kilku różnych układach XAML, więc zamiast powielania go, chciałbym po prostu powiązać go ze stałą.Ustawianie tekstu etykiety w XAML na ciąg stały

Mam klasy, która określa ciąg w C#:

public static class StringConstants 
{ 
    public static string MyString { get { return "SomeConstant"; } } 
} 

chciałabym móc ustawić wartość poprzez XAML poprzez coś jak następuje:

<Label Content="{Binding local:StringConstants.MyString}"/> 

to jest osiągalny? Szukałem przykładów, ale znalazłem tylko próbki, które zawierają pewne majsterkowanie w kodzie z tyłu i zastanawiam się, czy istnieje prostsze rozwiązanie tylko XAML, jeśli wiem, że wystarczy ustawić wartość raz na podstawie na wartości ciągu, która nigdy się nie zmieni.

Odpowiedz

19

Ty są wiążące do członka statycznego więc należy użyć x:Static Markup Extension:

<Label Content="{Binding Source={x:Static local:StringConstants.MyString}}"/> 

Według użytkownika @ HB komentarzu to nie jest konieczne stosowanie Wiązanie więc prostszy w obsłudze:

<Label Content="{x:Static local:StringConstants.MyString}"/> 
+1

Dlaczego i tak trzeba użyć wiązania? Na pewno bym nie ... –

+0

@ H.B. Co polecasz zamiast tego? – mtlynch

+3

@ nonsensical101: Po prostu pomijam: 'Treść =" {x: Statyczny lokalny: StringConstants.MyString} "' –

0

Umieść publiczny ciąg statyczny MyString w pliku App.xaml.cs. Następnie możesz odwołać się do niego w następujący sposób.

Content="{Binding Source={x:Static Application.Current}, Path=MyString}" 
-1

W przypadku, że masz stały wnętrze niestatyczny klasy, to nie zadziała.

Moje rozwiązanie do wiązania ze stałą wewnątrz modelu zobacz model (MVVM). Używa właściwości getter z mniejszym kodem do zawijania.

// view model 
public const string MyString = "abc"; 
public string MyStringConst => MyString; 

.

<!-- WPF -->  
<Label Content="{Binding MyStringConst, FallbackValue='abc'}" /> 

Parametr FallbackValue służy do podglądu projektanta.

Powiązane problemy