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