选择组合框中的项目时设置为可见

时间:2011-07-11 15:22:12

标签: wpf binding triggers

正如标题所说,我有一个隐藏的边框,里面有一些控件,我想在选择组合框中的特定项目时显示它。

我尝试了以下

<ComboBox Name="cmbRequiredRule" SelectedValuePath="Content"                                                                                                    
          SelectedValue="{Binding Path=ClientValidation.NarrativeRequiredRule}">
    <ComboBoxItem>All</ComboBoxItem>                         
    <ComboBoxItem>Matching</ComboBoxItem>
</ComboBox>

<Border Visibility="Collapsed">
    <Border.Resources>
        <Style TargetType="{x:Type Border}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Path=ClientValidation.NarrativeRequiredRule}" Value="Matching">
                    <Setter Property="Visibility" Value="Visible" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Border.Resources> 
.... 
</Border>

和视图模型中的此属性:

 public string NarrativeRequiredRule
    {
        get... 
        set... 
    } 

但触发器似乎无法正常工作

3 个答案:

答案 0 :(得分:1)

尝试在样式设置器中设置Visibility=Collapsed,而不是边框​​标记的一部分。我在过去遇到过一些问题,当将值指定为标记的一部分时,DataTrigger将不适用。

    <Border>
        <Border.Resources>
            <Style TargetType="{x:Type Border}">
                <Setter Property="Visibility" Value="Collapsed" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=Test}" Value="Matching">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Border.Resources>
        ...
    </Border>

答案 1 :(得分:1)

本地分配的值比样式需要precedence。因此你需要

<Setter Property="Visibility" Value="Collapsed" />
@ Style中的

正如@Rachel指出的那样。 我还尝试使用虚拟转换器调试绑定,发现该值的结果为System.Windows.Controls.ComboBoxItem: Matching而不是Matching

因此,您的最终风格是:

            <Style TargetType="{x:Type Border}">
                <Setter Property="Visibility" Value="Collapsed" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Path=ClientValidation.NarrativeRequiredRule}" Value="System.Windows.Controls.ComboBoxItem: Matching">
                        <Setter Property="Visibility" Value="Visible" />
                    </DataTrigger> 
                </Style.Triggers>                    
            </Style>

答案 2 :(得分:0)

可能是绑定问题。在下面的示例中:

<DataTrigger Binding="{Binding Path=ClientValidation.NarrativeRequiredRule}" Value="Matching">

ClientValidation位于何处?因为如果整个View的DataContext绑定到VM,则需要包含这些层次结构。检查输出日志,如果绑定失败则应该抛出一些错误