繁体   English   中英

WPF触发器绑定:将枚举值绑定到visiblity的最佳方法是什么?

[英]WPF Trigger Binding: What's the best way to bind an enum value to visiblity?

我有一个用户控件( NameField )。 在其中我有一个包含3个网格的堆栈面板: StandardViewFluidViewOtherView 在代码隐藏中,我有一个名为View of NameFieldViewenum )的DependencyProperty 枚举包含STANDARDFLUIDOTHER

我想我必须创建一个转换器,但我不确定这是否必要。 我基本上想View = NameFieldView.STANDARD ,以便唯一可见的网格是与枚举值匹配的那个...也就是说,如果View = NameFieldView.STANDARD那么名为StandardView的网格是可见的而其他两个则不可见。

另外,我不确定这应该是Grid.Resources / Style还是Grid.Triggers

我为此使用数据触发器。 它看起来像这样;

<Style TargetType="DockPanel" x:Key="ViewStyle1">
   <Setter Property="Visibility" Value="Collapsed"/>
   <Style.Triggers>
     <DataTrigger Binding="{Binding ViewStyle}" Value="ViewStyle1">
       <Setter Property="Visibility" Value="Visible"/>
     </DataTrigger>
   </Style.Triggers>
</Style>

然后我为每个视图样式创建一个DockPanel ,每当ViewStyle属性更改时,都会显示相应的视图。

像很多WPF一样,它真的取决于你的口味。 这里有几个选择。

您可以创建三个IValueConverter,将View属性的值转换为Visibility(或使用枚举名称作为ConverterParameter并创建一个转换器)。

您可以创建三个名为“StandardViewIsVisible”,“FluidViewIsVisible”和“OtherViewIsVisible”的新属性,这些属性在View属性更改时会更新。 这些属性的返回类型为Visibility。 即使你没有使用ViewModel,这绝对更像是一种“MVVM”的做事方式。

您可以使用DataTrigger根据View属性的当前值设置适当的网格Visible或Collapsed。

我会创建一个转换器。 如果您在遇到类似的适当绑定问题时添加转换器,您将慢慢为您的应用程序构建它们的库,从而使您将来更容易。 我会称之为NameFieldViewToVisibilityConverter - 它应该有两个方法:

public Object Convert(Object value, Type TargetType, Object param, CultureInfo Culture);
public Object ConvertBack(Object value, Type TargetType, Object param, CultureInfo Culture);

转换将具有NameFieldView参数并返回Visibility值。 ConvertBack将具有Visibility参数并返回NameFieldView值。

绑定看起来像这样:

<Grid Name="StandardView" Visibility="{Binding View, Converter={StaticResource NameFieldViewToVisibilityConverter}"  />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM