gpt4 book ai didi

wpf - 将嵌套的 ItemsControl 绑定(bind)到嵌套的集合

转载 作者:行者123 更新时间:2023-12-04 18:26:56 25 4
gpt4 key购买 nike

我正在尝试在我的 WPF/Caliburn Micro 应用程序中显示页面。这些页面应该以矩形的方式呈现给用户。我的想法是为页面使用我的基本 View 模型的集合(行)集合(列):

public BindableCollection<BindableCollection<BaseViewModel>> Children { get; set; }

然后在关联的 View 中做这样的事情:

    <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>

最佳答案

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>

关于wpf - 将嵌套的 ItemsControl 绑定(bind)到嵌套的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21556568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com