gpt4 book ai didi

wpf - DataGrid:动态DataGridTemplateColumn的动态DataTemplate

转载 作者:行者123 更新时间:2023-12-02 02:28:48 24 4
gpt4 key购买 nike

我想在数据网格中显示数据,其中数据是

public class Thing
{
public string Foo { get; set; }
public string Bar { get; set; }
public List<Candidate> Candidates { get; set; }
}

public class Candidate
{
public string FirstName { get; set; }
public string LastName { get; set; }
...
}

候选人列表中的候选人数量在运行时会发生变化。

所需的网格布局如下所示

Foo | Bar | Candidate 1 | Candidate 2 | ... | Candidate N

我想为每个 Candidate 设置一个 DataTemplate,因为我计划在运行时更改它 - 用户可以选择在不同的列中显示有关候选人的哪些信息(候选人只是一个例子,我有不同的对象)。这意味着我还想在运行时更改列模板,尽管这可以通过一个大模板并折叠其部分来实现。

我知道实现目标的两种方法(都非常相似):

  1. 使用 AutoGeneratingColumn 事件并创建Candidates
  2. 手动添加列

在这两种情况下,我都需要使用 XamlReader 从字符串加载 DataTemplate。在此之前,我必须编辑字符串以将绑定(bind)更改为想要的 Candidate

有没有更好的方法来创建具有未知数量的 DataGridTemplateColumn 的 DataGrid?

注意:本题基于dynamic datatemplate with valueconverter

编辑:因为我需要同时支持 WPF 和 Silverlight,所以我创建了自己的 DataGrid 组件,它具有用于绑定(bind) a 的 DependencyProperty列的集合。当集合发生变化时,我会更新列。

最佳答案

例如,我们创建 2 个 DataTemplates 和一个 ContentControl:

<DataTemplate DataType="{x:Type viewModel:VariantA}"> <dataGrid...> </DataTemplate>
<DataTemplate DataType="{x:Type viewModel:VariantB}"> <dataGrid...> </DataTemplate>

<ContentControl Content="{Binding Path=GridModel}" />

现在,如果您将 GridModel 属性(例如类型对象)设置为 VariantA 或 VariantB,它将切换 DataTemplate。

变体 A 和 B 示例实现:

public class VariantA
{
public ObservableCollection<ViewModel1> DataList { get; set; }
}

public class VariantB
{
public ObservableCollection<ViewModel2> DataList { get; set; }
}

希望这对您有所帮助。

关于wpf - DataGrid:动态DataGridTemplateColumn的动态DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4652350/

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