wpf使用静态标志来更新视图模型中的属性



在我的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

我希望这能有所帮助。

最新更新