2

我在绑定到静态属性时遇到问题。
我想根据bool变量的值Label使用Content truefalse 。

XAML:

<Label Content="{Binding Source={x:Static l:MainWindow.IsTrue}, Mode=OneWay}" />

后面的代码:

public partial class MainWindow : Window
{
    public static bool IsTrue { get; set; }
    DispatcherTimer myTimer;

    public MainWindow()
    {
        InitializeComponent();

        myTimer = new DispatcherTimer();
        myTimer.Interval = new TimeSpan(0, 0, 2); // tick every 2 seconds
        myTimer.Tick += new EventHandler(myTimer_Tick);
        myTimer.IsEnabled = true;
    }

    void myTimer_Tick(object sender, EventArgs e)
    {
        IsTrue = !IsTrue;
    }
}

它一直显示False

我知道为了实现两种方式绑定 ,我需要指定Path. 但我需要一种方式绑定。

4

1 回答 1

7

问题是 WPF 不知道您的属性何时(或是否)更改。与实例方法不同,INotifyPropertyChanged您无法实现 -style 接口,因为您不能拥有“静态接口”。因此,它永远不会看到您更改的值。

如果您使用的是 WPF 4.5,则可以使用新的静态属性更改通知支持来处理此问题。

在 .NET 4.0 或更早版本中,处理此问题的最简单方法通常是将属性包装到单例中,并INotifyPropertyChanged在单例实例上使用。

于 2012-09-18T01:05:51.823 回答