在我的计划中,我有comboBox
和listBox
。 listBox
充满了不同的命令。 selectedItem
的{{1}}和内容取决于所选的命令。 comboBox
中的selectedItem
保持为该命令选择。例如,当用户在comboBox
中选择了内容并且他们切换到其他命令,然后切换回来时,仍然会在comboBox
中选择相同的项目。
因为comboBox
根据选择的命令填充了不同的项目,我应该为每组项目设置comboBox
吗?我只允许将ObservableCollection
绑定到一个东西,那么它将如何工作?
如果这不是正确的方法,请告知。如果这还不够清楚,请告诉我。
谢谢!
以下是我的程序的样本:
然后,如果选择了命令2,则组合框中的列表可能是a,b,c,d,e,例如。
答案 0 :(得分:0)
每个listbox命令都可以有一个单独的ObservableCollection。
当用户选择新的列表框命令时,将comboBox.ItemsSource设置为适当的ObservableCollection。这应该可以解决你的问题。
答案 1 :(得分:0)
根据您的说明,combobox
的内容与listbox
中的所选项目相关联。在不知道任何细节的情况下,您的业务对象似乎是一个包含ObservableCollection
“SubCommand”的“Command”对象?对象。然后,您的应用程序将包含Observablecollection
个“Command”对象。 listbox
将是绑定到“Command”对象列表的数据,combobox
将绑定到所选项“SubCommand”集合。
答案 2 :(得分:0)
在我看来,你正在寻找一个主/细节结构:
数据项:
public class MyCommandDefinition
{
public string DisplayName {get;set;}
public List<MyParameter> Parameters {get;set;}
public Parameter SelectedParameter {get;set;}
}
public class MyParameter
{
public string DisplayName {get;set;}
//Additional properties depending on your needs.
}
视图模型:
public class MyViewModel
{
public List<MyCommandDefinition> Commands {get;set;}
public MyCommandDefinition SelectedCommand {get;set;}
}
XAML:
<ListBox ItemsSource="{Binding Commands"}"
SelectedItem="{Binding SelectedCommand}"
DisplayMemberPath="DisplayName"/>
<ComboBox ItemsSource="{Binding SelectedCommand.Parameters}"
SelectedItem="{Binding SelectedCommand.SelectedParameter}"
DisplayMemberPath="DisplayName"/>
如果您要以编程方式更改它们并希望将其反映在UI中,请不要忘记所有这些属性中的NotifyPropertyChanged()
。