对于一个项目,我有一个非常复杂的viewModel结构。
请注意我在setter中省略了“NotifyOfPropertyChange”调用!
public class EntityViewModel : PropertyChangedBase
{
public ObservableCollection<PlatformViewModel> Platforms;
}
public class PlatformViewModel : PropertyChangedBase
{
public ObservableCollection<UnitViewModel> Units;
}
public class UnitViewModel : PropertyChangedBase
{
public ObservableCollection<ModuleViewModel> Units;
public string UnitName { get; set; }
}
public class ModuleViewModel : PropertyChangedBase
{
public string ModuleName { get; set; }
public string Version { get; set; }
}
现在我想在List中可视化它,就像这里一样(只是为了让想要的结果更清晰)
其中黑色是平台,绿色单位和橙色模块。
尝试过ListView,但没有成功。永远不要显示单个元素。
所以问题是:
实现这种可视化的最佳方式是什么?
ListView会是一个不错的选择吗?
我找不到一个很好的例子吗?
答案 0 :(得分:2)
让你入门的东西,需要进一步自定义布局。
<ItemsControl ItemsSource="{Binding Platforms}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Black" BorderThickness="1">
<ItemsControl ItemsSource="{Binding Units}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Green" BorderThickness="1">
<ItemsControl ItemsSource="{Binding Units}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"></StackPanel>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Yellow" BorderThickness="1"></Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 1 :(得分:1)
我不知道每个元素是否可选,或者它们是否水平均匀,但如果是这样,您应该能够使用嵌套的ItemsControl
对其进行建模。
将ItemsPanel
设置为UniformGrid
Rows="1"
Unit
ItemsControl
,其他ItemsControl
默认设置为ItemsPanel
垂直StackPanel
的{{1}}应该没问题。