代码之家  ›  专栏  ›  技术社区  ›  Álvaro García

如何使用需要静态全局变量的DataTrigger?

  •  0
  • Álvaro García  · 技术社区  · 6 年前

    我有一个静态类,它有一个静态属性,我需要设置按钮的可见性。

    我正在尝试类似的方法:

    <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的标题中,我还包括名称空间:

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

    但是当属性isadmin为true时,按钮不可见。

    我尝试过其他类似的方法:

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

    但这并不能解决问题。

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

    谢谢。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Clemens    6 年前

    使用 Source 的属性 Binding ,即

    <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}"
    
        2
  •  0
  •   Mark Feldman    6 年前

    您可以像绑定任何其他属性那样绑定静态属性,也就是说,只需将其设置为静态属性,或者执行如下操作:

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

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

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