C# 从单个组合框选择中选择多个SelectedValue
我有一个组合框,显示ObservableCollection(包含多个目录链接)中的项目。 然后我有几个TreeView和datatables,所有这些都需要根据组合框选择引用目录。我知道我在过去看到过一个类似的问题,只是一直没有找到它!!任何方向都将不胜感激 例如,集合的内容包括:C# 从单个组合框选择中选择多个SelectedValue,c#,wpf,combobox,treeview,selectedvalue,C#,Wpf,Combobox,Treeview,Selectedvalue,我有一个组合框,显示ObservableCollection(包含多个目录链接)中的项目。 然后我有几个TreeView和datatables,所有这些都需要根据组合框选择引用目录。我知道我在过去看到过一个类似的问题,只是一直没有找到它!!任何方向都将不胜感激 例如,集合的内容包括: public class ProjectThread { public String projectName { get; set; } public String Directory1 {
public class ProjectThread
{
public String projectName { get; set; }
public String Directory1 { get; set; }
public String Directory2 { get; set; }
public String Directory3 { get; set; }
}
现在,我试图找出如何从单个组合框选择中检索多个值路径:
<ComboBox x:Name="comboBox"
HorizontalAlignment="Left"
ItemsSource="{Binding Items}"
DisplayMemberPath="projectName"
SelectedValuePath="Directory1"/> (**How to reference multiple?)
这是我的treeview后端:
private void ListDirectory(TreeView treeView, string path)
{
treeView.Items.Clear();
var rootDirectoryInfo = new DirectoryInfo(path);
treeView.Items.Add(CreateDirectoryNode(rootDirectoryInfo));
}
private static TreeViewItem CreateDirectoryNode(DirectoryInfo directoryInfo)
{
var directoryNode = new TreeViewItem { Header = directoryInfo.Name };
foreach (var directory in directoryInfo.GetDirectories())
directoryNode.Items.Add(CreateDirectoryNode(directory));
foreach (var file in directoryInfo.GetFiles())
directoryNode.Items.Add(new TreeViewItem { Header = file.Name });
return directoryNode;
}
至于“重复线程”注释,我认为情况并非如此。链接指的是datagrid选择。我的问题是关于combobox选择,其项具有多个属性。我的问题是如何在XAML中从同一选择中提取多个属性。我找到了我问题的答案。我很难找到此解决方案,因此这里是一个案例你遇到了同样的麻烦 我没有使用SelectedValuePath…而是通过以下操作绑定到所选内容的多个属性: 树景1 树景2 树景3
您最好使用一些类似MVVM的解决方案,其中您有一个绑定到组合框的带有
SelectedProject
的viewmodel,以及一些Directory1,Directory2…
属性,这些属性是根据SelectedProject
计算的,如中。或者如果您不想使用/学习MVVM(尽管我建议这样做)你可以看看组合框上的事件。谢谢你的建议,Eugene。我在编程教育的早期,慢慢走向MVVM。我很有可能在将来将我的代码(和这个项目)重构为MVVM,但现在我希望有一个XAML解决方案,我碰巧遇到了,并在下面的答案中发布了。谢谢你的输入!!!
private void ListDirectory(TreeView treeView, string path)
{
treeView.Items.Clear();
var rootDirectoryInfo = new DirectoryInfo(path);
treeView.Items.Add(CreateDirectoryNode(rootDirectoryInfo));
}
private static TreeViewItem CreateDirectoryNode(DirectoryInfo directoryInfo)
{
var directoryNode = new TreeViewItem { Header = directoryInfo.Name };
foreach (var directory in directoryInfo.GetDirectories())
directoryNode.Items.Add(CreateDirectoryNode(directory));
foreach (var file in directoryInfo.GetFiles())
directoryNode.Items.Add(new TreeViewItem { Header = file.Name });
return directoryNode;
}
ItemsSource="{Binding ElementName =comboBox, Path=SelectedItem.Directory1, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding ElementName =comboBox, Path=SelectedItem.Directory2, UpdateSourceTrigger=PropertyChanged}"
ItemsSource="{Binding ElementName =comboBox, Path=SelectedItem.Directory3, UpdateSourceTrigger=PropertyChanged}"