gpt4 book ai didi

c# - WPF MVVM Bind Dictionary> 到数据网格

转载 作者:太空狗 更新时间:2023-10-30 01:32:43 26 4
gpt4 key购买 nike

我无法绑定(bind)我的 Dictionary<string, List<string>>到具有正确布局的 WPF 数据网格。

这是我的数据对象:

public class Result
{
public Result(string type, string name, Dictionary<string, List<string>> partners)
{
Type = type;
Name = name;
Partners = partners;
}

public string Type { get; set; }
public string Name { get; set; }
public Dictionary<string, List<string>> Partners { get; set; }
}

我用虚拟数据填充并公开为我的 View 模型的公共(public)属性:

public class MainViewModel
{
public MainViewModel()
{
var partners = new Dictionary<string, List<string>>
{
{"Company", new List<string> {"company1", "company2"}},
{"Operator", new List<string> {"false", "true"}},
{"Interest", new List<string> {"40%", "60%"}},
{"Type", new List<string> {"type1", "type2"}}
};
Asset = new Result("TestType", "TestName", partners);
}

public Result Asset { get; set; }
}

我正在尝试绑定(bind) Partners字典到我的数据网格。 Key每个字典条目(例如公司/运营商/兴趣/类型)应该构成我的数据网格的标题,相应的值填充列。像这样:

Company | Operator | Interest | Type
company1 false 40% type1
company2 true 60% type2

我怎样才能做到这一点?我一直在看this question但是数据与我想要的相反。我希望我的键作为数据网格列标题(我不介意对标题进行硬编码,因为我相信标题属性不能使用数据绑定(bind))。到目前为止,这是我的 XAML,itemsource 已正确绑定(bind),但我不知道如何以我需要的格式获取数据:

<DataGrid x:Name="dg" ItemsSource="{Binding Asset.Partners}" AutoGenerateColumns="false">
<DataGrid.Columns>
<DataGridTextColumn Header="Company" Binding="{Binding ?}"/>
<DataGridTextColumn Header="Operator" Binding="{Binding ?}"/>
<DataGridTextColumn Header="Interest" Binding="{Binding ?}"/>
<DataGridTextColumn Header="Type" Binding="{Binding ?}"/>
</DataGrid.Columns>
</DataGrid>

如果我使用 Binding="{Binding Value[0]}对于第一列,然后我在列中得到“行”值,但我希望反过来。我也试过使用 Binding="{Binding Asset.Partners[Company]}"但这没有用。

感谢任何帮助。

最佳答案

我个人会创建一个对象模型来表示您的数据,并绑定(bind)到这些对象的集合。

public class MyObject
{
public string Company { get; set; }
public string Operator { get; set; }
public string Interest { get; set; }
public string Type { get; set; }
}

public MainViewModel()
{
var partners = new ObservableCollection<MyObject>()
{
new MyObject("company1", "false", "40%", "type1"),
new MyObject("company2", "true", "60%", "type2")
};
...
}

我认为普通 DataGrid 无法满足您的要求,因为它将内容读取为“对于集合中的每一行,创建一个 DataRow 并将 DataContext 分配给该行”。在您的情况下,每一行代表整个数据网格,因此这对您不起作用。

关于c# - WPF MVVM Bind Dictionary<String, List<String>> 到数据网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36359631/

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