我有这样的数据结构:
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
正确显示目录。第二个ComboBox
将String[] Array, String[] Array....
显示为项目,而不是数组的值。
答案 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,仍有一些工作要做。但这应该可以解决问题。