WPF和数据网格数组

时间:2018-11-09 13:28:49

标签: c# wpf xaml datagrid

我正在尝试使用WinForms开发一些东西,这将是众所周知的“小菜一碟”。动态的数据绑定数据网格集。那在应用程序启动时初始化。有时需要一个,有时需要五个。最初,对于XAML来说看起来太多了。所以我在用常规C#挣扎着。使用WPF时,这真是太不友好了,我一次又一次地碰壁。

还是我做错了一切?是否有任何正确的方法来...“复制” /“克隆”一个使用XAML设计并关闭的数据网格,并将这些克隆作为动态数组重用?每当我寻求解决越来越多WPF障碍的解决方案时(例如,使用WinForms像动态行着色一样简单),我有时都会找到XAML解决方案。普通代码解决方案极为罕见。即使尝试将XAML“转换”为常规代码,我也会错过很多属性/方法(或者它们的名称不同)。无论如何-就像这些天人们完全转向XAML一样。较复杂的控件数组不常见吗?我发现了绑定到某些表的按钮数组的一些示例。就是这样。再加上它对一系列的数据网格都不起作用...

1 个答案:

答案 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类可以很好地拥有创建这些网格所需的所有属性。因此,例如,您可以具有列定义,例如标题文本,列宽等...