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

时间:2018-07-20 10:12:43

标签: c# wpf datatrigger

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

我正在尝试类似的事情:

<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 个答案:

答案 0 :(得分:1)

使用Source的{​​{1}}属性,即

Binding

重要提示:<DataTrigger Binding="{Binding Source={x:Static vg:GlobalResources.MyProperty}, Path=IsAdmin}" Value="True"> 必须是依赖项属性,或者必须在更改后触发IsAdmin

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

INotifyPropertyChanged.PropertyChanged

答案 1 :(得分:0)

您可以像绑定其他任何属性一样绑定静态对象,即只需将其设为静态,或执行以下操作:

Locale aLocale = new Locale.Builder().setLanguage("RU").setScript("Latn").setRegion("RS").build();
Geocoder geocoder = new Geocoder(this, aLocale);
List<Address> addressList = geocoder.getFromLocation(lat, lng, 1);

我怀疑这里的真正问题是您的静态对象不是属性,即它没有“获取”访问器。恐怕没有办法解决,至少看起来像这样:

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