2011-10-01 54 views
1

我試圖將不同類的靜態屬性綁定到TextBlock的Text屬性,並且可以使綁定工作,但是當靜態屬性的值發生更改時,沒有更新文本屬性。我讀過,我不能使用INotifyPropertyChanged,因爲該屬性是靜態的,並且已經看到許多建議使用依賴屬性的解決方案。我對C#非常陌生,並且不太瞭解如何使用依賴屬性,但做了一些似乎沒有工作的嘗試有兩個原因。 1.我的靜態屬性具有自定義getter和setter和2.靜態屬性用於許多靜態方法,我無法弄清楚如何使用依賴屬性進行工作。我不知道如何在使用Dependency屬性時使用自定義getter和setter,或者如果這可以完成,或者在將其更改爲Dependency Property後,如何在靜態方法中繼續使用靜態屬性。如何將XAML綁定到靜態屬性?

下面是靜態屬性當前代碼:

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}}"/> 

我真的很感激任何幫助!

+0

爲什麼使它靜態?爲什麼不將token讀取器/寫入器構建成一個完整的類,並且只是在視圖模型上暴露它的一個實例(通過'字符串Token'屬性)?然後,如果你有另一個令牌文件,你可以有一個方便的方式來重用這個代碼... –

回答

0

綁定到靜態屬性是一個問題(和不可用在WPF中)改變通知(爲靜態屬性實現INotifyPropertyChanged)。綁定到靜態屬性將在WPF 4.5中引入(您可以通過安裝.NET 4.5 Developer Preview來檢查它)。 有關它的更多詳細信息可以參見here

1

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

因爲事實證明,如果沒有.NET 4.5,我不可能改變屬性和方法,不再是靜態的,並將類更改爲單例,然後實現INotfiyPropertyChanged並將XAML綁定源更改爲x:Static在Window.Resources中創建一個實例。