将2个组合框绑定到Dict <string,string [] =“”>

时间:2018-10-04 16:44:06

标签: c# wpf data-binding

我有这样的数据结构:

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

请考虑目录及其文件的列表。我希望能够通过首先选择带有第一个ComboBox的目录来选择文件。选择目录后,第二个ComboBox应显示可用文件。更改第一ComboBox中的所选项目应更改第二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正确显示目录。第二个ComboBoxString[] Array, String[] Array....显示为项目,而不是数组的值。

1 个答案:

答案 0 :(得分:1)

将第一个组合框的SelectedItem绑定到ViewModel的一个属性并绑定该属性的值

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

在您的ViewModel中,您将必须拥有

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,仍有一些工作要做。但这应该可以解决问题。