具有复杂ViewModel结构的ListView

时间:2013-04-30 16:07:36

标签: c# wpf xaml listview

对于一个项目,我有一个非常复杂的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中可视化它,就像这里一样(只是为了让想要的结果更清晰)

Visualisation of ViewModels

其中黑色是平台,绿色单位和橙色模块。

尝试过ListView,但没有成功。永远不要显示单个元素。

所以问题是:

  • 实现这种可视化的最佳方式是什么?

  • ListView会是一个不错的选择吗?

  • 我找不到一个很好的例子吗?

2 个答案:

答案 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}}应该没问题。