2011-07-22 65 views
9

複数の異なるXAMLレイアウトで再利用する必要がある単一の文字列定数があるため、複製する代わりに定数にバインドするだけです。XAMLのラベルテキストを文字列定数に設定する

私はC#で文字列を定義するクラスがあります。

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

私は次のようなものを経由してXAMLを通じて値を設定できるようにしたいと思います:

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

はこれです達成可能か?私はサンプルを検索しましたが、コードビハインドでいくつかの修正が必要なサンプルしか見つからなかったので、XAMLのみの単純なソリューションがあるのか​​どうか疑問に思っています。変更されることのない文字列値に置き換えます。

答えて

19

あなたはx:Static Markup Extension使用する必要があるので、あなたは静的メンバに結合されています

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

なぜバインディングを使用するのですか?私は確かに... –

+0

@ H.B。代わりに何をお勧めしますか? – mtlynch

+3

@ nonsensical101:ちょうどそれを放棄する: 'Content =" {x:Static local:StringConstants.MyString} "' –

0

:それはそう、それは使用する方が簡単だバインディングを使用する必要はありません@ HBさんのコメントによると

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

をパブリック静的文字列MyStringをApp.xaml.cs.に配置します。次に、次のように参照することができます。あなたは非静的クラスの定数内部を持っている場合は

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

、これは動作しません。

ビューモデル(MVVM)の定数内部へのバインディングのための私の解決策です。 ラッピングのコードが少ないgetterプロパティを使用します。

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

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

FallbackValueは、デザイナーのプレビューに使用されます。

関連する問題