C# WPF和数据网格阵列

C# WPF和数据网格阵列,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我正在尝试开发一些东西,通过WinForms,这将是众所周知的“小菜一碟”。数据绑定数据网格的动态集合。在应用程序启动时初始化。有时需要一个,有时需要五个。起初,它对XAML来说似乎太多了。所以我在用常规的C#来对付它。这对WPF来说是非常不友好的,我一次又一次地撞墙 还是我做错了?有没有正确的方法。。。“复制”/“克隆”一个使用XAML设计和关闭的数据网格,并将这些克隆作为动态阵列重用?每当我寻找解决越来越多WPF障碍的方法时(例如,像动态行着色这样简单的方法(使用WinForms),我有时会

我正在尝试开发一些东西,通过WinForms,这将是众所周知的“小菜一碟”。数据绑定数据网格的动态集合。在应用程序启动时初始化。有时需要一个,有时需要五个。起初,它对XAML来说似乎太多了。所以我在用常规的C#来对付它。这对WPF来说是非常不友好的,我一次又一次地撞墙


还是我做错了?有没有正确的方法。。。“复制”/“克隆”一个使用XAML设计和关闭的数据网格,并将这些克隆作为动态阵列重用?每当我寻找解决越来越多WPF障碍的方法时(例如,像动态行着色这样简单的方法(使用WinForms),我有时会找到XAML解决方案。纯代码解决方案极为罕见。即使尝试将XAML“翻译”为常规代码,我也会错过很多属性/方法(或者它们的名称不同)。不管怎样,这就像人们现在完全转向XAML一样。更复杂的控件数组是否不常见?我发现一些绑定到某个表的按钮数组示例。差不多就是这样。此外,它从未在数据网格数组中工作过…

这只是一个原型,说明了绑定如何能够以最少的代码生成快速结果

<Window x:Class="testtestz.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <ItemsControl ItemsSource="{Binding GridViews}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <ListView ItemsSource="{Binding Data}" BorderBrush="Gray" BorderThickness="1" Margin="5">
                        <ListView.View>
                            <GridView>
                                <GridViewColumn DisplayMemberBinding="{Binding Id}" Header="Id"/>
                                <GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Name"/>
                            </GridView>
                        </ListView.View>
                    </ListView>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
</Window>

这就是背后的代码

using System.Collections.Generic;
using System.Windows;

namespace testtestz
{ 
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            List<object> myData = new List<object>()
            {
                new { Id = 1, Name = "John" },
                new { Id = 2, Name = "Mary" },
                new { Id = 3, Name = "Anna" },
            };

            GridViews.Add(new MyGrid { Data = myData});
            GridViews.Add(new MyGrid { Data = myData });
            GridViews.Add(new MyGrid { Data = myData });

            DataContext = this;
        }

        public List<MyGrid> GridViews { get; } = new List<MyGrid>();
    }

    public class MyGrid
    {
        public IEnumerable<object> Data { get; set; }
    }
}
使用System.Collections.Generic;
使用System.Windows;
名称空间testz
{ 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
List myData=新列表()
{
新的{Id=1,Name=“John”},
新的{Id=2,Name=“Mary”},
新的{Id=3,Name=“Anna”},
};
Add(newmygrid{Data=myData});
Add(newmygrid{Data=myData});
Add(newmygrid{Data=myData});
DataContext=this;
}
公共列表网格视图{get;}=new List();
}
公共类MyGrid
{
公共IEnumerable数据{get;set;}
}
}

请记住,您几乎可以绑定任何您喜欢的内容,这样MyGrid类就可以拥有创建这些网格所需的所有属性。例如,您可以使用XAML来定义列定义,如标题文本、列宽等…

这项任务不仅仅是一块蛋糕,而是一块蛋糕…因为您的问题听起来像是刚开始使用WPF(“起初它看起来对XAML来说太多了”)花些时间阅读ItemsControl,项目模板和绑定机制如Robs答案所示