Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从单个组合框选择中选择多个SelectedValue_C#_Wpf_Combobox_Treeview_Selectedvalue - Fatal编程技术网

C# 从单个组合框选择中选择多个SelectedValue

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 {

我有一个组合框,显示ObservableCollection(包含多个目录链接)中的项目。 然后我有几个TreeView和datatables,所有这些都需要根据组合框选择引用目录。我知道我在过去看到过一个类似的问题,只是一直没有找到它!!任何方向都将不胜感激

例如,集合的内容包括:

    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}"