1

对于一个项目,我有一个相当复杂的 viewModel 结构。

请注意,我在设置器中省略了“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; }
}

现在我想在一个列表中可视化它,就像这里一样(只是为了让想要的结果更清楚)

ViewModel 的可视化

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

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

所以问题是:

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

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

  • 周围有没有我找不到的好例子?

4

2 回答 2

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>
于 2013-04-30T16:21:51.500 回答
1

我不知道每个元素是否是可选的,或者它们是否水平尺寸一致,但如果是这样,您应该能够使用 nested 对其进行建模ItemsControl

将 的 设置为ItemsPanela UniformGrid,而其他的默认垂直s 应该没问题。Rows="1"Unit ItemsControlItemsControlItemsPanelStackPanel

于 2013-04-30T16:16:42.500 回答