Видимость StackPanel в зависимости от выбора Combobox

1

Я хочу иметь StackPanel, видимость которого зависит от выбора Combobox. К несчастью, XAML ниже не работает.

Я нашел решение с новым свойством, которое будет установлено в событии PropertyChanged для выбора Combobox, хотя я предпочел бы строгое решение 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>
Теги:
xaml
wpf
combobox
mvvm

3 ответа

1
Лучший ответ

вы можете переписать то же самое, что и

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

предполагая, что combobox привязан к коллекции, чей элемент имеет свойство CodeText. поэтому SelectedItem.CodeText укажет на то же самое.

кроме того, не требуется устанавливать <Setter Property="Visibility" Value="Visible"/> поскольку это значение по умолчанию. он не имеет никакого эффекта в этом случае только для некоторой дополнительной строки кода, которую можно удалить.

  • 0
    Я использовал IsSelected вместо SelectedItem. Спасибо за подсказку!
  • 0
    Замечательно! счастливого кодирования :)
1

Вы также можете использовать конвертер и напрямую привязываться к свойству PictureInPicture:

<StackPanel  Visibility="{Binding PictureInPicture, Converter={StaticResource myVisibilityConverter}}"/>
    <Label>Picture in Picture is used</Label>
    (...)
</StackPanel>
-2
  1. Создавайте флаги и передавайте этот флаг в конвертер видимости стекапанель.
  2. На основе флага в конвертере сделать панель стека решений видимой/скрытой
  3. Установите эту квартиру в событии изменения выбора comboBox, если выбранное значение соответствует вашему требованию.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню