Как скрыть / показать элементы в панели стека? - PullRequest
3 голосов
/ 01 февраля 2011

У меня есть приложение wpf-mvvm.

В этом у меня есть следующее ...

<Combo box>
item 1
item 2
</Combo box>
<stack pnel>
 <user control 1 />
 <user control 1 />
</stack pnel>

Если пользователь выбирает "элемент 1" из списка, мне нужно отобразить "пользователь"control 1 "Если пользователь выбирает" item 2 "из комбо, мне нужно отобразить" user control 2 "

В модели представления ... У меня есть список IList этих двух элементов комбинированного списка.

Какой лучший способ скрыть / показать элементы здесь?

Ответы [ 3 ]

5 голосов
/ 01 февраля 2011

На самом деле вы можете полностью удалить StackPanel, поскольку одновременно будет отображаться только один элемент UserControl.

Как только вы это сделаете, вы можете использовать метод , описанный здесь , чтобы связать значение ComboBox с видимостью UserControl.Просто установите Visibility на Collapsed для UserControl, который не выбран.

Это позволяет вам полностью обработать это в XAML.

1 голос
/ 02 февраля 2011

Это демонстрирует два простых способа, с помощью которых вы можете использовать стиль для изменения видимости элементов на основе выбора в поле со списком. Первый стиль проверяет SelectedIndex поля со списком, а второй проверяет его SelectedValue. В этом примере я заполнил поле со списком строковыми объектами, но вы можете использовать SelectedValue с любым типом объекта, если вы знаете, что возвращает его метод ToString().

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:system="clr-namespace:System;assembly=mscorlib">
  <DockPanel>
  <ComboBox x:Name="comboBox" DockPanel.Dock="Top">  
   <system:String>Item 1</system:String>
   <system:String>Item 2</system:String>
  </ComboBox>
  <TextBlock DockPanel.Dock="Top" Text="This displays if Item 1 is selected">
   <TextBlock.Style>
    <Style TargetType="TextBlock">
      <Setter Property="Visibility" Value="Collapsed"/>
      <Style.Triggers>
       <DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedIndex}" Value="0">
        <Setter Property="Visibility" Value="Visible"/>
       </DataTrigger>
      </Style.Triggers>
    </Style>
   </TextBlock.Style>
  </TextBlock>
  <TextBlock DockPanel.Dock="Top" Text="This displays if Item 2 is selected.">
   <TextBlock.Style>
    <Style TargetType="TextBlock">
      <Setter Property="Visibility" Value="Collapsed"/>
      <Style.Triggers>
       <DataTrigger Binding="{Binding ElementName=comboBox, Path=SelectedValue}" Value="Item 2">
        <Setter Property="Visibility" Value="Visible"/>
       </DataTrigger>
      </Style.Triggers>
    </Style>
   </TextBlock.Style>
  </TextBlock>
  </DockPanel>
</Page>
1 голос
/ 01 февраля 2011

Всегда есть еще один способ сделать это: -)

Например, вы можете сделать очень простой способ: подписаться на SelectionChanged, проверить, какой элемент выбран в данный момент, и установить видимостьпредметы, которые нужно спрятать, чтобы их свернуть.

Есть более продвинутые способы, но я сомневаюсь, что они нужны для этой простой задачи.Однако при разработке вашего кода вам, возможно, придется пересмотреть этот подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...