簡體   English   中英

如何在XAML中綁定到靜態屬性?

[英]How to bind in XAML to a static property?

我試圖將不同類的靜態屬性綁定到TextBlock的Text屬性,並可以使綁定工作,但是當靜態屬性的值發生更改時,Text屬性沒有更新。 我已經讀過我不能使用INotifyPropertyChanged,因為該屬性是靜態的,並且已經看到許多建議使用依賴屬性的解決方案。 我是C#的新手,並不真正了解如何使用依賴屬性,但是做了幾次嘗試似乎沒有用,原因有兩個。 1.我的靜態屬性具有自定義getter和setter以及2.靜態屬性用於許多靜態方法,我無法弄清楚如何使用依賴屬性進行工作。 我不知道在使用依賴屬性時如何使用自定義getter和setter,或者甚至可以在將其更改為依賴屬性后如何繼續使用靜態方法中的靜態屬性。

這是靜態屬性的當前代碼:

public class Helper
{
    public static string Token
    {
        get
        {
            using (StreamReader streamReader = new StreamReader("Token.ini"))
            {
                return streamReader.ReadLine();
            }
        }
        set
        {
            using (StreamWriter streamWriter = new StreamWriter("Token.ini"))
            {
                streamWriter.WriteLine(value);
            }
        }
    }

public static MethodThatUsesToken(){}
public static OtherMethodThatUsesToken(){}

這里綁定的當前XAML工作但不更新:

<Window.Resources>
<local:Helper x:Key="helper"/>
</Window.Resources>

<TextBlock Text="{Binding Source={StaticResource helper},Path=Token Converter={StaticResource NameConverter}}"/>

我非常感謝任何幫助!

目前這不可能,但將在.NET 4.5中:另請參閱“WPF 4.5 - 第9部分:綁定到靜態屬性”

在這個SO線程中發布了一個解決方法: 綁定到靜態屬性

如果這有助於其他任何人,我想我會發布我的最終解決方案,這對我的目的很有效。

由於事實證明,如果沒有.NET 4.5,我最終將屬性和方法更改為不再是靜態的,並將類更改為單例,然后實現INotfiyPropertyChanged並將XAML綁定源更改為x:Static而不是創建實例在Window.Resources中。

綁定到靜態屬性是一個問題(在WPF中不可用),因為更改通知(為靜態屬性實現INotifyPropertyChanged)。 綁定到靜態屬性將在WPF 4.5中引入(您可以通過安裝.NET 4.5 Developer Preview來檢查它)。 有關它的更多細節可以在這里找到。

暫無
暫無

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

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