Связывание 2 комбо-боксов с Dict - PullRequest
0 голосов
/ 04 октября 2018

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

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

Подумайте о списке каталогов и их файлах.Я хотел бы иметь возможность выбирать файлы, сначала выбрав каталог с первым ComboBox.После выбора каталога 2-й 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 правильно показывает каталоги.2-й ComboBox показывает String[] Array, String[] Array.... как элементы вместо значений массивов.

1 Ответ

0 голосов
/ 04 октября 2018

Свяжите первый выбранный элемент комбинированного списка со свойством вашей модели представления и свяжите значение этого свойства

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

В вашей модели представления вы должны иметь

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

во втором комбинированном окне

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

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

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