【问题标题】:Filling WPF DataGrid in C# with a Dictionary <String,MyClass>用字典 <String,MyClass> 在 C# 中填充 WPF DataGrid
【发布时间】:2022-01-12 22:56:03
【问题描述】:

我想用我的字典中的数据填充数据网格。绑定列 Binding="{Binding Key} 有效,但尝试绑定 MyClass 的值 (Binding="{Binding Value.myString}) 我只获得未找到的属性'目的'。我应该改变什么? 提前致谢。

【问题讨论】:

    标签: c# visual-studio xaml


    【解决方案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 Dictionary 中得到。 MyClass 包含除 ID 之外的所有数据,我需要将其与 MyClass 中的字符串一起显示。有没有办法避免在里面只为 ID 和 MyClass 创建另一个数据持有者?
    • “另一个数据持有者”是什么意思?你最好使用ObservalbleCollection
    • 我通过将其设置为 ObservableCollection 找到了 workarund,但使用了包含 MyClass 和 ID 的新类。它有效,但增加了数据结构的复杂性,这是我试图避免的。无论如何感谢您的帮助:)
    猜你喜欢
    • 2011-07-09
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2019-01-28
    • 2013-05-01
    相关资源
    最近更新 更多