如何使用需要静态全局变量的数据触发器?
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">
但是并没有解决问题
那么,我该如何使用全局变量呢?
谢谢。
使用Binding
的Source
属性,即
<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!";
我有一个静态 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">
但是并没有解决问题
那么,我该如何使用全局变量呢?
谢谢。
使用Binding
的Source
属性,即
<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!";