用字典 <String,MyClass> 在 C# 中填充 WPF DataGrid
Posted
技术标签:
【中文标题】用字典 <String,MyClass> 在 C# 中填充 WPF DataGrid【英文标题】:Filling WPF DataGrid in C# with a Dictionary <String,MyClass> 【发布时间】:2022-01-12 22:56:03 【问题描述】:我想用我的字典中的数据填充数据网格。绑定列 Binding="Binding Key 有效,但尝试绑定 MyClass 的值 (Binding="Binding Value.myString) 我只获得未找到的属性'目的'。我应该改变什么? 提前致谢。
【问题讨论】:
【参考方案1】:我可以给你一个样品。
请看以下代码:
xaml:
Binding="Binding MyclassDic[N_100].Id"
cs:
xxx.Binding=new Binding(@"MyclassDic[N_100].Id");
MainWindow.xaml:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="197" Width="514.5"
Loaded="Window_Loaded">
<Grid RenderTransformOrigin="0.5,0.5" Margin="0,0,-1,3">
<Grid.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform Angle="0.338"/>
<TranslateTransform/>
</TransformGroup>
</Grid.RenderTransform>
<DataGrid Name="DataGrid" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Width="150" Binding="Binding MyclassDic[N_100].Id" />
<DataGridTextColumn Header="Name" Width="150" Binding="Binding MyclassDic[N_100].Name" />
<DataGridTextColumn Header="Age" Width="150" Binding="Binding MyclassDic[N_100].Age" />
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
MainWindow.xaml.cs:
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
namespace WpfApp1
public partial class MainWindow : Window
public MainWindow ()
InitializeComponent();
private void Window_Loaded (object sender, RoutedEventArgs e)
List<Project> projects = new List<Project>();
Project project = new Project();
project.MyclassDic.Add("N_100", new Myclass(1, "Tim", 30));
projects.Add(project);
DataGrid.ItemsSource = projects;
Myclass.cs:
using System;
namespace WpfApp1
public class Myclass
public int Id
get; set;
public String Name
get; set;
public int Age
get; set;
public Myclass (int Id,String Name, int Age)
this.Name = Name;
this.Id = Id;
this.Age = Age;
项目.cs:
using System;
using System.Collections.Generic;
namespace WpfApp1
public class Project
public Dictionary<String, Myclass> MyclassDic
get; set;
public Project ()
MyclassDic = new Dictionary<String, Myclass>();
输出:
【讨论】:
好的,我明白这一点,但在 MainWindow.xaml 中,您的目标是特定项目 (N_100)。如何显示字典中的所有项目?它是从服务器加载的,每次应用打开时数据都会发生变化。 这个结构有点特殊,能否介绍一下你的代码结构?我可以进一步帮助你。 我从 firesharp DictionaryObservalbleCollection
。
我通过将其设置为 ObservableCollection 找到了 workarund,但使用了包含 MyClass 和 ID 的新类。它有效,但增加了数据结构的复杂性,这是我试图避免的。无论如何感谢您的帮助:)以上是关于用字典 <String,MyClass> 在 C# 中填充 WPF DataGrid的主要内容,如果未能解决你的问题,请参考以下文章
如何在java中获得类似`MyClass<String>.class`的东西