2011-10-01 50 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中创建一个实例。