2016-12-30 6 views
0

皆さん。C#グローバル静的文字列をUWPテキストブロックにバインド

誰でも、グローバルな静的文字列をUWP Textblockにバインドする方法を知っていますか?

私のような、多くのことを試してみました:

Text="{Binding Path={local:AppSettings.StorageFolder}, Mode=OneWay}" 
Text="{x:Bind Path=(local:AppSettings.StorageFolder), RelativeSource={RelativeSource Self}, Mode=OneWay}" 

そしてどれも機能しません。私は私のクラスに非静的な値にバインドするために管理している

「ネストした型がサポートされていないと 値が予想される範囲内に収まっていない」:

Text="{x:Bind viewModel.MyValue, Mode=OneWay}" 
常にいくつかのエラーは、次のように、アップします

これに対する解決策はありますか?

Thanx。

+0

可能な限り静的変数を取り除くことを強くお勧めします。 –

+0

アプリケーション設定などのグローバル変数を各ページに表示して変更するには、どのような方法が最適ですか? – user3239349

+0

グローバル/静的変数を使用するのが最悪の場合、特別な「最良の」方法はありません。 –

答えて

0

UWPの静的プロパティには、WPFと同じ方法でバインドすることはできません。 x:静的なマークアップ拡張はありません。

あなたは、いくつかのオプションがあります。

要素のDataContextのは、静的プロパティが定義されているタイプのインスタンスである場合、あなたはいつものように、静的プロパティにバインドすることができます:

<TextBlock Text="{Binding MyStaticProperty}" /> 

public sealed partial class BlankPage1 : Page 
{ 
    public BlankPage1() 
    { 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    public static string MyStaticProperty { get { return "Static..."; } } 
} 

静的プロパティは別のクラスで定義されている場合は、あなたの最良のオプションは、非静的1に静的プロパティをラップすることです:

public sealed partial class BlankPage1 : Page 
{ 
    public BlankPage1() 
    { 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    public static string MyWrapperProperty { get { return MyStaticClass.MyStaticProperty; } } 
} 

public static class MyStaticClass 
{ 
    public static string MyStaticProperty { get { return "Static..."; } } 
} 

あなたが財産チャンをしたい場合プロパティのソースオブジェクトは、PropertyChangedイベントを発生させてターゲットプロパティを動的にリフレッシュできるように、INotifyPropertyChangedインターフェイスを実装する必要があるため、静的プロパティにバインドするのは意味がありません。

あなたはまだINotifyPropertyChangedインターフェイスを実装してビューモデルの非静的1に静的プロパティをラップすることができます:

public class ViewModel : INotifyPropertyChanged 
{ 
    public string MyNonStaticProperty 
    { 
     get { return MyStaticClass.MyStaticProperty; } 
     set { MyStaticClass.MyStaticProperty = value; NotifyPropertyChanged(); } 
    } 

    //... 
} 

public static class MyStaticClass 
{ 
    public static string MyStaticProperty { get; set; } 
} 

あなたはobviosulyビューモデルからNotifyPropertyChanged(「My​​NonStaticProperty」)を呼び出す必要がありますビューのターゲットプロパティをリフレッシュするときはいつでも、クラスを使用できます。

+0

Thanx、非静的なクラスを介して静的な更新は私の問題を解決しました。 – user3239349

関連する問題