如何使用需要静态全局变量的数据触发器?

How to use a datatrigger that needs a static global variable?

我有一个静态 class,其中有一个静态 属性,我需要设置按钮的可见性。

我正在尝试这样的事情:

<Button.Style>
                                <Style TargetType="Button">
                                    <Setter Property="Visibility" Value="Collapsed"/>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding ElementName=x:Static vg:GlobalResources.MyProperty, Path=IsAdmin}" Value="True">
                                            <Setter Property="Visibility" Value="Visible"/>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </Button.Style>

此外,在 xaml 的 header 中,我包含名称 space:

xmlns:vg="clr-namespace:MyApplication.resources"

但是当 属性 IsAdmin 为真时,按钮不可见。

我试过其他类似的选项:

<DataTrigger Binding="{Binding ElementName=x:Static vg:GlobalResources, Path=MyProperty.IsAdmin}" Value="True">

但是并没有解决问题

那么,我该如何使用全局变量呢?

谢谢。

使用BindingSource属性,即

<DataTrigger Binding="{Binding Source={x:Static vg:GlobalResources.MyProperty}, Path=IsAdmin}" Value="True">

重要提示:IsAdmin 必须是依赖项 属性 或必须在更改时触发 INotifyPropertyChanged.PropertyChanged

从 WPF 4.5 开始,还有用于绑定到静态属性的语法:

Binding="{Binding Path=(vg:GlobalResources.MyProperty).IsAdmin}"

您可以像绑定其他任何东西一样绑定静态 属性,即将其设置为静态,或执行如下操作:

<TextBlock Text="{x:Static vm:MyViewModel.MyStaticText}" />

我怀疑这里真正的问题是你的静态不是 属性 即它没有 "get" 访问器。恐怕没有办法绕过那个,它至少看起来像这样:

public static string MyStaticText { get; } = "Hello World!";