Привязка к ComboBoxItem

293
09 июня 2017, 08:31

Есть несколько гридов. Все они скрыты до тех пор пока в ComboBoxне выбрано ComboBoxItem. Когда выбираю один из ComboBoxItem должен появиться соответственно один из гридов. Привязку пытаюсь сделать в XAML без вью модели:

  <Grid x:Name="Cash" Visibility="{Binding ElementName=cmb_Security, Path=SelectedValue.Cash}" >

Cash это Item в Сombobox но сам грид виден независимо от того выбрано ли что то в боксе вообще. Как исправить это расширение разметки ?

Answer 1

В вашем вопросе на мой взгляд содержаться два отдельных.

Первый - это как отображать элемент только в том случае, когда есть выбранный элемент. Эту проблему можно решить с помощью триггера с проверкой на то, что SelectedIndex != -1. Простейший пример:

<Grid HorizontalAlignment="Center">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <ComboBox Name="some"
                  Grid.Row="0"
                  Margin="10"
                  MinWidth="120"
                  ItemsSource="{Binding Data}" />
        <TextBlock Grid.Row="1" Text="{Binding Path=SelectedItem, ElementName=some}" Margin="10">
            <TextBlock.Style>
                <Style>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ElementName=some, Path=SelectedIndex}" Value="-1">
                            <Setter Property="TextBlock.Visibility" Value="Collapsed" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </TextBlock.Style>
        </TextBlock>
    </Grid>

для полноты примера привожу тривиальный контекст для данных

module Context2 = 
    open Gjallarhorn.Bindable
    let create() =    
        let source = Binding.createSource()
        [|"Some1"; "Some2" ; "Some3" |]
        |> Binding.constantToView "Data" <| source
        source

Второй - как в зависимости от выбранного элемента в списке отобразить соответствующие данные. Если вкратце - вы создаете список из "страничных" VM и привязываете его к вашему ComboBox. Выбранный элемент вы можете непосредственно отображать в ContentControl через привязку к SelectedItem или завести свойство в основной VM которое и будет отвечать за выбранную VM.

На этот счет есть замечательная статья Navigation with MVVM, где вы можете прочитать об этом подходе более подробно, а также посмотреть на реализацию простого примера.

READ ALSO
Ошибка при запуске Excel: &#171;Не удалось получить фабрику класса COM&#187;

Ошибка при запуске Excel: «Не удалось получить фабрику класса COM»

Я создал две кнопки которые должны открывать Word и ExcelWord открывает, а вот Excel не открывает

258
Как изменить разрешение видео на движке joomla

Как изменить разрешение видео на движке joomla

Здравствуйтекак можно изменить разрешение видео на joomla

286
D3js разбить окружность

D3js разбить окружность

Есть некая окружностьКоторая соответствует одной "порции" данных

340
Включения микрофона в popup окне

Включения микрофона в popup окне

Всем приветСтолкнусля со следующей проблемой: необходимо создать плагтн для хрома для VoIP

325