gpt4 book ai didi

silverlight - 将 Accordion 数据绑定(bind)到 Silverlight 中的通用列表

转载 作者:行者123 更新时间:2023-12-01 10:10:57 27 4
gpt4 key购买 nike

给定包含以下格式的两个属性(IdentityType 和 Name)的对象列表:

IdentityType | Name
A | One
A | Two
A | Three
B | Four
B | Five
C | Six

有没有办法以声明方式进行数据绑定(bind),以便 Accordion 像这样显示?

A
- One
- Two
- Three
B
- Four
- Five
C
- Six

到目前为止,我能得到的最好的是每个项目的面板标题,如下所示:

<toolkit:Accordion ItemsSource="{Binding Path=Identities}" Grid.Row="2" SelectionMode="ZeroOrMore">
<toolkit:Accordion.ItemTemplate>
<DataTemplate >
<TextBlock Text="{Binding IdentityType, Converter={StaticResource EnumDescriptionConverter}}"/>
</DataTemplate>
</toolkit:Accordion.ItemTemplate>
<toolkit:Accordion.ContentTemplate>
<DataTemplate>
<StackPanel Margin="5" Orientation="Horizontal">
<TextBlock Text="{Binding Name}" Foreground="White" />
</StackPanel>
</DataTemplate>
</toolkit:Accordion.ContentTemplate>
</toolkit:Accordion>

我是 Silverlight 的新手,所以我可能会遗漏一些非常明显的东西,但非常感谢任何帮助!

最佳答案

您可以在模型(初始化列表)和 View (标记)之间使用 View 模型来执行此操作。

  • 创建一个带有 Title 和 NameCollection 的 View 模型类
  • 使用 LINQ(或简单的 foreach)将现有的 6 个实体列表转换为 3 个实体的列表,其名称集合中分别有 3 个、2 个和 1 个名称。
  • 将 Accordions ItemsSource 绑定(bind)到 ViewModel 对象的集合。
  • 将 Accordion 项标题模板中的文本 block 绑定(bind)到您的 Title 属性
  • 将重复项目控件(如 ItemsControl)添加到 Accordion 项目的内容模板
  • 将重复项绑定(bind)到 NamesCollection

假设你的模型如下...

public class Model
{
public string Title { get; set; }
public string Name { get; set; }
}

您的 View 模型结构应该是...

public class ViewModel
{
public string Title { get; set; }
public List<string> Names { get; set; }
}

public class DataContextClass
{
public DataContextClass()
{
var modelData = new ModelData();

var query = from m in modelData.ModelCollection
group m by m.Title
into vm select new ViewModel { Title = vm.Key, Names = vm.Select(x => x.Name).ToList() };
ViewModelCollection = query.ToList();
}

public List<ViewModel> ViewModelCollection { get; set; }
}

然后您的 View 可以创建您的 DataContextClass 实例,将其分配给它自己的 DataContext 属性,然后使用此标记...

<layout:Accordion ItemsSource="{Binding Path=ViewModelDataInstance.ViewModelCollection}" >
<layout:Accordion.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Title}" />
</DataTemplate>
</layout:Accordion.ItemTemplate>
<layout:Accordion.ContentTemplate>
<DataTemplate>
<ItemsControl ItemsSource="{Binding Path=Names}" />
</DataTemplate>
</layout:Accordion.ContentTemplate>
</layout:Accordion>

关于silverlight - 将 Accordion 数据绑定(bind)到 Silverlight 中的通用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5089275/

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