【问题标题】:Multiple selectedvalues from single combobox selection来自单个组合框选择的多个选定值
【发布时间】:2023-04-10 02:37:02
【问题描述】:

我有一个组合框,它显示来自 ObservableCollection 的项目(其中包含多个目录链接。 然后我有几个树视图和数据表,所有这些都需要根据组合框选择来引用目录。我知道我过去曾看到过类似的问题,只是从那以后一直找不到!任何方向将不胜感激!

例如集合的内容是:

    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?)

这是我的树视图的初始化方式:

        public MainWindow()
    {
        InitializeComponent();
        this.ListDirectory(treeView1, **unsure how to reference directory from combobox**"); 
        this.ListDirectory(treeView2, **unsure how to reference directory from combobox**"); 
    }

这是我的树视图后端:

        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;

    }

至于“重复线程”评论,我认为情况并非如此。该链接是指数据网格选择。我的问题是关于其项目具有多个属性的组合框选择。我的问题是如何从 XAML 中的同一选择中提取多个属性。

【问题讨论】:

  • 你最好的办法是使用一些类似 MVVM 的解决方案,其中你有一个带有 SelectedProject 绑定到 ComboBox 的视图模型和一些根据 SelectedProject 计算的 Directory1, Directory2 ... 属性,比如在stackoverflow.com/questions/33814890/…。或者,如果您不想使用/学习 MVVM(尽管我更愿意推荐这样做),您可以查看组合框上的 SelectionChanged 事件。
  • 感谢您的建议,尤金。我很早就开始接受编程教育,并且正在慢慢走向 MVVM。将来我很可能会将我的代码(和这个项目)重构为 MVVM,但现在我希望有一个 XAML 解决方案,我碰巧遇到并在下面的答案中发布。感谢您的意见!!!

标签: c# wpf combobox treeview selectedvalue


【解决方案1】:

我找到了我的问题的答案。我很难找到这个解决方案,所以在这里以防万一有人遇到同样的麻烦!

而不是使用 SelectedValuePath... 我可以通过这样做绑定到我的选择的多个属性:

树视图 #1

ItemsSource="{Binding ElementName =comboBox, Path=SelectedItem.Directory1, UpdateSourceTrigger=PropertyChanged}"

树视图 #2

ItemsSource="{Binding ElementName =comboBox, Path=SelectedItem.Directory2, UpdateSourceTrigger=PropertyChanged}"

树视图 #3

ItemsSource="{Binding ElementName =comboBox, Path=SelectedItem.Directory3, UpdateSourceTrigger=PropertyChanged}"

【讨论】:

    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    相关资源
    最近更新 更多