如何在XAML中绑定到静态属性?

时间:2011-10-01 18:08:14

标签: c# xaml binding static

我试图将不同类的静态属性绑定到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}}"/>

我真的很感激任何帮助!

3 个答案:

答案 0 :(得分:3)

这目前不可行,但将在.NET 4.5中:另请参阅"WPF 4.5 – Part 9 : binding to static properties"

此SO主题中有一个解决方法:Binding to static property

答案 1 :(得分:1)

如果这有助于其他任何人,我认为我会发布我的最终解决方案,这对我的目的非常有用。

由于事实证明没有.NET 4.5,我最终将属性和方法更改为不再是静态的,并将类更改为单例,然后实现INotfiyPropertyChanged并将XAML绑定源更改为x:Static而不是在Window.Resources中创建一个实例。

答案 2 :(得分:0)

绑定到静态属性是一个问题(在WPF中不可用),因为更改通知(为静态属性实现INotifyPropertyChanged)。绑定到静态属性将在WPF 4.5中引入(您可以通过安装.NET 4.5 Developer Preview来检查它)。 有关它的更多详细信息,请参见here