正如标题所说,我有一个隐藏的边框,里面有一些控件,我想在选择组合框中的特定项目时显示它。
我尝试了以下
<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...
}
但触发器似乎无法正常工作
答案 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,则需要包含这些层次结构。检查输出日志,如果绑定失败则应该抛出一些错误