【问题标题】:ListCollectionView does not track the current selected item on a TreeView in WPFListCollectionView 不跟踪 WPF 中 TreeView 上的当前选定项
【发布时间】:2011-08-25 09:28:44
【问题描述】:

我已经完成了这个非常简单的示例,它是一个带有 TreeView 和 Button 的窗口。当您单击按钮时,您应该会看到选定的项目,但它不起作用,当您更改选择时,CurrentItem 属性不会更新:

C#:

using System.Collections.ObjectModel;
using System.Windows;
using System.Windows.Data;

namespace TreeViewSort
{
public partial class Window1
{
    private ObservableCollection<string> _items;
    public ListCollectionView SortedItems { get; private set; }

    public Window1()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        _items =new ObservableCollection<string>();
        _items.Add("ZZ");
        _items.Add("AA");
        _items.Add("CA");
        _items.Add("DA");
        _items.Add("EA");

        this.SortedItems = new ListCollectionView(_items);
        this.DataContext = this;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        MessageBox.Show(this.SortedItems.CurrentItem.ToString());
    }
}
}

XAML:

<Window x:Class="TreeViewSort.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300" Loaded="Window_Loaded">
    <DockPanel>
        <TreeView DockPanel.Dock="Top" Name="treeView1" ItemsSource="{Binding SortedItems, Mode=TwoWay}" MinHeight="200" />
        <Button DockPanel.Dock="Bottom" Click="Button_Click">
            Test
        </Button>
    </DockPanel>
</Window>

MSDN 文档说

如果目标是ItemsControl,则当前项与选中项同步

知道为什么这不起作用吗?

提前致谢。

【问题讨论】:

    标签: c# .net wpf treeview listcollectionview


    【解决方案1】:

    即使文档说这将适用于任何 ItemControl 我已经阅读(和看到)的是它只适用于选择器......

    【讨论】:

      【解决方案2】:

      我不确定 ListCollectionView 中的 CurrentItem,请尝试在下面执行此操作: 在 Window1 类中创建一个属性 -> public string SelectedItem { get;放; } 在 XAML 中,将树视图控件 SelectedItem 属性与您的 SelectedItem 属性绑定。

      应该可以。

      关于 SelectedItem -> http://msdn.microsoft.com/en-us/library/system.windows.controls.treeview.selecteditem.aspx

      问候 帕维尔·扬科夫斯基

      【讨论】:

      • 嗯,这只是一个例子。我遇到的真正问题是我有一个排序的集合,我需要将选择移动到下一个项目。如果我使用您的方法,我会转到未排序集合的下一项(因此您最终在 UI 上选择了错误的项)。
      【解决方案3】:

      我不得不这样做,但它并不漂亮。我有一个混合树视图/数据网格。为了能够移动到下一个/上一个项目或上下移动项目,我必须执行以下操作。

      1. 向我的模型添加 IsSelected 属性(黑客 - 我知道)
      2. 每个模型都有一个排序顺序属性
      3. 在树中选择一个项目时 - 使用 linq 查询来查找任何其他已选择的项目并将其标记为未选择
      4. 将刚刚选择的项目标记为 IsSelected
      5. 然后使用自定义逻辑(自定义我的意思是 150 多行代码)来确定下一项应该在哪里。但是,此逻辑考虑了树中折叠的项目和两个级别(父/子)。

      IIRC 我必须这样做的原因是我需要的值在可视树上,但我正在使用逻辑树。

      【讨论】:

        猜你喜欢
        • 2013-01-08
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 2016-12-05
        • 1970-01-01
        相关资源
        最近更新 更多