我正在尝试使用WinForms开发一些东西,这将是众所周知的“小菜一碟”。动态的数据绑定数据网格集。那在应用程序启动时初始化。有时需要一个,有时需要五个。最初,对于XAML来说看起来太多了。所以我在用常规C#挣扎着。使用WPF时,这真是太不友好了,我一次又一次地碰壁。
还是我做错了一切?是否有任何正确的方法来...“复制” /“克隆”一个使用XAML设计并关闭的数据网格,并将这些克隆作为动态数组重用?每当我寻求解决越来越多WPF障碍的解决方案时(例如,使用WinForms像动态行着色一样简单),我有时都会找到XAML解决方案。普通代码解决方案极为罕见。即使尝试将XAML“转换”为常规代码,我也会错过很多属性/方法(或者它们的名称不同)。无论如何-就像这些天人们完全转向XAML一样。较复杂的控件数组不常见吗?我发现了绑定到某些表的按钮数组的一些示例。就是这样。再加上它对一系列的数据网格都不起作用...
答案 0 :(得分:1)
这只是绑定如何以最少的代码即可产生快速结果的原型。
<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; }
}
}
请记住,您几乎可以绑定任何您喜欢的东西,因此MyGrid类可以很好地拥有创建这些网格所需的所有属性。因此,例如,您可以具有列定义,例如标题文本,列宽等...