StackPanel可见性取决于Combobox选择

时间:2014-10-08 07:25:45

标签: c# wpf xaml mvvm combobox

我希望有一个StackPanel,其可见性应取决于Combobox选择。不幸的是,下面的XAML不起作用。

我找到了一个带有新属性的解决方案,该属性将在Combobox选择的PropertyChanged事件中设置,但我更倾向于使用严格的XAML解决方案。

有关如何解决此问题的任何提示?

<StackPanel>
    <Label>Picture in Picture function</Label>
    <ComboBox Name="cbPictureInPicture" ItemsSource="{Binding Path=PictureInPictureCodeList, Mode=OneWay}" DisplayMemberPath="CodeText"
        SelectedValuePath="CodeID" SelectedValue="{Binding Path=PictureInPicture, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
<StackPanel>
    <StackPanel.Style>
        <Style TargetType="StackPanel">
            <Setter Property="Visibility" Value="Visible" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=cbPictureInPicture, Path=IsSelected.CodeText}" Value="Yes">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Style>
    <Label>Picture in Picture is used</Label>
    (...)
</StackPanel>

3 个答案:

答案 0 :(得分:1)

您可能会重写与

相同的内容
<DataTrigger Binding="{Binding ElementName=cbPictureInPicture, Path=SelectedItem.CodeText}" Value="Yes">
    <Setter Property="Visibility" Value="Hidden"/>
</DataTrigger>

假设组合框绑定到其项目具有CodeText属性的集合。所以SelectedItem.CodeText将指向相同的。

此外,可能不需要设置<Setter Property="Visibility" Value="Visible" />,因为它是默认值。它在这种情况下没有任何影响,只是可以删除一些额外的代码行。

答案 1 :(得分:1)

您还可以使用转换器并直接绑定到PictureInPicture属性:

<StackPanel  Visibility="{Binding PictureInPicture, Converter={StaticResource myVisibilityConverter}}"/>
    <Label>Picture in Picture is used</Label>
    (...)
</StackPanel>

答案 2 :(得分:-2)

  1. 创建标记并在stackpanel可见性转换器中传递此标志。
  2. 根据转换器中的标志,决定stackpanel可见/隐藏任何
  3. 如果根据您的要求选择了值,则在comboBox选择更改事件中设置此单位。