У меня есть такая структура данных:

public Dictionary<string, string[]> AvailableFiles { get; private set; }

Подумайте о списке каталогов и их файлов. Я хотел бы иметь возможность выбирать файлы, сначала выбрав каталог с первым ComboBox. После выбора каталога второй ComboBox должен показать доступные файлы. Изменение выбранного элемента в 1-м ComboBox должно изменить элементы во 2-м ComboBox.

Каким-то образом это должно быть возможно, но до сих пор я делал только простые привязки WPF. То, что у меня есть, так это.

<ComboBox
    x:Name="CbFirmwareVersion"
    ItemsSource="{Binding Path=Manager.AvailableFiles}"
    SelectedIndex="0"
    DisplayMemberPath="Key"
    SelectedValuePath="Value"
    Style="{StaticResource ComboBoxStyle}"
    Margin="{StaticResource DefaultContentMargin}" />
<ComboBox
    x:Name="CbFirmwareFile"
    ItemsSource="{Binding Path=Manager.AvailableFiles}"
    SelectedIndex="0"
    DisplayMemberPath="Value"
    SelectedValuePath="Key"
    SelectedValue="{Binding ElementName=CbFirmwareVersion, Path=SelectedValue}"
    Style="{StaticResource ComboBoxStyle}"
    Margin="{StaticResource DefaultContentMargin}" />

Первый ComboBox правильно отображает каталоги. Второй ComboBox показывает String[] Array, String[] Array.... как элементы вместо значений массивов.

0
Diemex 4 Окт 2018 в 19:44

1 ответ

Лучший ответ

Привяжите SelectedItem первого Combobox к свойству вашей ViewModel и привяжите значение этого свойства

<ComboBox
...
SelectedItem = "{Binding Path=SelectedDirectory, Mode=OneWayToSource}" />

В вашей ViewModel вам понадобится

KeyValuePair<String,String[]> SelectedDirectory {get;set;}

Во втором ComboBox

<ComboBox
x:Name="CbFirmwareFile"
ItemsSource="{Binding Path=SelectedDirectory.Value, Mode=OneWay}"
SelectedIndex="0"
Style="{StaticResource ComboBoxStyle}"
Margin="{StaticResource DefaultContentMargin}" />    

Для PropertyChanged есть еще кое-что по сантехнике. Но это должно помочь.

1
Andreas 4 Окт 2018 в 17:14