【发布时间】: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 节课。