我正在尝试在我的WPF / Caliburn Micro应用程序中显示页面。页面应以矩形方式呈现给用户。我的想法是使用基本视图模型的集合(列)集合(页面):
public BindableCollection<BindableCollection<BaseViewModel>> Children { get; set; }
在关联的视图中执行类似的操作:
<ItemsControl x:Name="Children">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding /}">
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这是错误的 - 我没有把内容放到内部的ItemsControl中。
感谢您的任何想法!
我仍然不确定这是否是完美的解决方案,但它对我来说有用并且似乎不太讨厌:
<ItemsControl x:Name="Children">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentControl cal:View.Model="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 0 :(得分:4)
Binding.Path
中的正斜杠表示父集合中的当前项,但不会作为ItemsSource
值,因为它不是集合:
<ItemsControl ItemsSource="{Binding /}"> <!-- This won't work here -->
您还需要定义内部ItemsControl.ItemTemplate
。尝试这样的事情:
<ItemsControl ItemsSource="{Binding Children}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Vertical" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate> <!-- Bind to the whole data item (a collection) here -->
<ItemsControl ItemsSource="{Binding}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate> <!-- Display your BaseViewModel data items here -->
<YourXmlNamespacePrefix:YourControl DataContext="{Binding}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>