我遇到绑定到静态属性的问题。
我希望Label
Content
true 或 false 取决于 bool 变量的值。
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 。
我知道为了实现双向绑定 I need to,请指定Path
。但我需要一种方式绑定。
答案 0 :(得分:7)
问题是WPF不知道您的财产何时(或是否)发生变化。与实例方法不同,您可以实现没有INotifyPropertyChanged
- 样式的界面,因为您不能拥有&#34;静态界面。&#34;因此,它永远不会看到您更改的值。
如果您正在使用WPF 4.5,则可以使用新的static property changed notification support来处理此问题。
在.NET 4.0或更早版本中,处理此问题的最简单方法通常是将属性包装为单例,并在单例实例上使用INotifyPropertyChanged
。