簡體   English   中英

綁定到靜態類實例中的屬性

[英]Binding to a property within a static class instance

我正在努力實現的目標

我有一個WPF應用程序(僅用於測試),我想將標簽的文本(內容)綁定到某個位置的屬性。 想法是,當用戶選擇其他語言時,將更改此屬性值。 當屬性更改時,我希望標簽文本以新值更新。

我嘗試過的

我試圖為標簽值創建一個帶有靜態屬性的靜態類。 例如:

public static class Language
{
    public static string Name = "Name";
}

然后,我可以使用XAML將此值綁定到標簽上,如下所示:

Content="{Binding Source={x:Static lang:Language.Name}}"

這樣做可以很好地顯示“名稱”的初始值。 問題是,當Name屬性更改時,標簽值不會更改。

因此,回到繪圖板(Google)。 然后我找到了這個答案 ,聽起來完全符合我的需求。 因此,這是我的新嘗試:

public class Language
{
    public static Language Instance { get; private set; }
    static Language() { Instance = new Language(); }
    private Language() { }

    private string name = "Name";
    public string Name { get { return name; } set { name = value; } }
}

用我的綁定更改了它:

Content="{Binding Source={x:Static lang:Language.Instance}, Path=Name}"

這仍然會導致相同的問題。

問題

我在這里想念什么? 值更改后如何更新標簽?

那根本不是財產。 嘗試:

public class Language
{
    public static Language Instance { get; private set; }
    static Language() { Instance = new Language(); }
    private Language() { Name = "Name"; }

    public string Name {get;private set;}
}

或帶有更改通知:

public class Language : INotifyPropertyChanged
{
    public static Language Instance { get; private set; }
    static Language() { Instance = new Language(); }
    private Language() { }

    private string name = "Name";
    public string Name
    {
        get { return name; }
        set { SetValue(ref name, value);}
    }
    protected void SetValue<T>(ref T field, T value,
        [CallerMemberName]string propertyName=null)
    {
        if (!EqualityComparer<T>.Default.Equals(field, value))
        {
            field = value;
            OnPropertyChanged(propertyName);
        }
    }
    protected virtual void OnPropertyChanged(
        [CallerMemberName]string propertyName=null)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM