【问题标题】:TreeView Grouping树视图分组
【发布时间】:2014-01-15 20:35:09
【问题描述】:

我的目标是从单个集合创建树视图,但根据特定属性对其进行分组,如下所示:

(Alphabetical View)
      Test Machine 1
    > Test Machine 2
        |_ Test Device 1
        |_ Test Device 2
    > Test Machine 3
        |_ Test Device 3
        |_ Test Device 4
      Test Machine 4

(Location View)
    > Chicago
        |_ Test Machine 1
        |_ Test Machine 4       
    > Green Bay
        |_ Test Machine 3
        |_ Test Device 3
        |_ Test Device 4
    > Louisville
        |_ Test Machine 2
            |_ Test Device 1
        |_ Test Device 2

(Status View)
    > Connected
        |_ Test Machine 1
        |_ Test Machine 2
            |_ Test Device 1
            |_ Test Device 2
    > Disconnected
        |_ Test Machine 3
            |_ Test Device 3
            |_ Test Device 4

    > Unknown
        |_ Test Machine 4

(Device Type View)
    > Type A
        |_ Test Device 1
        |_ Test Device 3
    > Type B        
        |_ Test Device 2
        |_ Test Device 4

下面是我的课程的基本分类和上面示例的一些示例数据:

public class Machine
{
    public string MachineName { get; set;}
    public string Location { get; set;} 
    public IList<Device> Devices { get; set;}
    public Status Status { get; set;}
}

public class Device
{
    public string DeviceName { get; set;}
    public string DeviceType { get; set;}
}

public enum Status
{
    Unknown,
    Disconnected,
    Connected
}

public IList<Machine> Machines
{
    get 
    {
        return new IList<Machine>()
        {
            new Machine { MachineName = "Test Machine 1", Location = "Chicago", Status = Status.Connected, Devices = new List<Device>() },
            new Machine { MachineName = "Test Machine 2", Location = "Louisville", Status = Status.Connected, Devices = new List<Device>
                                                                                                                            {
                                                                                                                                new Device { DeviceName = "Test Device 1", DeviceType = "Type A"},
                                                                                                                                new Device { DeviceName = "Test Device 2", DeviceType = "Type B"},
                                                                                                                            }},
            new Machine { MachineName = "Test Machine 3", Location = "Green Bay", Status = Status.Disconnected, Devices = new List<Device>
                                                                                                                            {
                                                                                                                                new Device { DeviceName = "Test Device 3", DeviceType = "Type A"},
                                                                                                                                new Device { DeviceName = "Test Device 4", DeviceType = "Type B"},
                                                                                                                            } },
            new Machine { MachineName = "Test Machine 4", Location = "Chicago", Status = Status.Unknown, Devices = new List<Device>() }
        }
    }
}

目前,我通过为我的主 ViewModel 中的 TreeView 的每个分组创建一个子 ViewModel 来做到这一点。然后,在按下按钮时,我更改了绑定到 ContentControl 的 ViewModel。然后,ContentControl 可以使用隐式模板来专门为该分组绘制它。

有没有办法使用 CollectionViewSource 及其 here 列出的分组功能来做到这一点?我认为这可以节省我大约 7 节课...

【问题讨论】:

  • @elgonzo 如果您这么认为,请支持它,因为这样可以提高知名度。我的工作解决方案可以在这里看到:github.com/killnine/MvvmTest。但这需要我再上 7 节课。

标签: c# wpf mvvm treeview


【解决方案1】:

如果您的项目数量很大,我敢打赌您当前的解决方案最适合,因为您可以应用线程。

CollectionViewSourceGrouping 将是不可知的 GUI 线程,并且还会丢失 VirtualizationThreeView

作为一名开发人员,我宁愿不要减少课程的数量,即使你可能会这样做。 :-)

【讨论】:

  • 哇,这是一个非常周到和有用的评论。我没有意识到Grouping 和线程。此外,WPF 很棒!
  • 是的,WPF 很棒。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-02
  • 1970-01-01
相关资源
最近更新 更多