在我的wpf应用程序中,我试图根据特定的静态布尔变量更改窗口标题栏。这个想法是,无论我在哪里更新这个静态标志,窗口标题都会更改。如果是真的,则Title="**Foo"else Title="Foo"。
第一次尝试:
我在MainViewModel 中创建了一个静态布尔值
public static bool RefreshTitleBar { get; set;}
在我的MainWindowView.xaml中进行了以下更改:
<Window.Resources>
<Style TargetType="Window">
<Style.Triggers>
Binding="{Binding Source={x:Static viewModel:MainViewModel.RefreshTitleBar}, UpdateSourceTrigger=PropertyChanged}" Value="True">
<Setter Property="Title" Value="--Foo"/>
</DataTrigger>
Binding="{Binding Source={x:Static viewModel:MainViewModel.RefreshTitleBar}, UpdateSourceTrigger=PropertyChanged}" Value="False">
<Setter Property="Title" Value="Foo"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
但当RefreshTitleBar值更改时,它不会更新。我还有其他属性在处理绑定,所以我知道这不是问题所在。
我在这里错过了什么?有人能帮我理解为什么我的标题栏不能工作吗?标题栏是第一次设置后就无法更新的东西吗?非常感谢。
您的代码不起作用的原因是您的静态属性没有更改通知。所以你的触发器永远不会启动。
您可能需要考虑将RefreshTitleBar
属性作为标准INotifyPropertyChanged
属性,将其放入singleton类中。这样,对于整个应用程序,您将只有一个类的实例,并且您将获得所需的更改通知。
您可以为静态属性实现更改通知,但这有点困难。
绑定静态属性并实现INotifyPropertyChanged
我希望这能有所帮助。