【问题标题】:WPF - Printing Array property in GridViewWPF - 在 GridView 中打印数组属性
【发布时间】:2013-12-08 00:02:14
【问题描述】:

我有一个此类的列表:

public class A
{
    public string Name{ get; set; }
    public int ID { get; set; }
    public B[] B_details { get; set; } 
    public int phone { get; set; }

}

我想在 GridView 中显示。 B类也有一些属性,其中有属性Name。 我的网格定义是:

<Grid>
    <DataGrid AutoGenerateColumns="True" Name="dataGrid1" IsReadOnly="True" AlternationCount="2" />
</Grid>

问题是,因为它是 AutoGenerated GridView - B_details 列中的值都以“B[] Array”的形式显示。 如何显示该班级所有 B 成员的姓名?

【问题讨论】:

    标签: c# wpf arrays gridview


    【解决方案1】:

    我可以想到两种方法:

    1) 使用类而不是B[],并覆盖其ToString() 方法。所以你会有类似的东西:

    public class BArray : List<B>
    {
        public override void ToString()
        {
            return string.Join(Items.Select(item => item.Name), ", ");
        }
    }
    

    这样,B.Name 的逗号分隔列表将打印在 DataGrid 列中。

    2) 关闭自动生成的列,并为B_details 列指定DataTemplate。例如:

    <DataGrid.Columns>
        <!-- insert other columns -->
        <DataGridTemplateColumn Header="B Details">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ItemsControl ItemsSource="{Binding B_details}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Name}" Margin="0,0,5,0" />
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                        <ItemsControl.ItemsPanel>
                            <ItemsPanelTemplate>
                                <StackPanel Orientation="Horizontal" />
                            </ItemsPanelTemplate>
                        </ItemsControl.ItemsPanel>
                    </ItemsControl>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    <DataGrid.Columns>
    

    【讨论】:

    • 好吧,我真的不想改变 A 类,这就是为什么我试图找到“开箱即用”的解决方案来解决这个问题。不过,您的第二个选项对我来说似乎是合适的,除了我仍然想保持它“自动生成”。我仍然可以想到一个解决方案 - 但我需要知道 - 有没有办法将所有这些“DataTemplate”标签转移到 C# 中?因为如果答案是 YES - 我就完了。我只需要知道如何...谢谢!
    • @user2406262 XamlReader,它允许您在 C# 中从 XAML 字符串创建 DataTemplate。
    • @user2406262 另一种选择:运行时输入和ICustomTypeDescriptor。这有点涉及,但它对于自定义由 DataGrid 列生成器构造的内容很有用。您基本上可以将A 之类的类包装在另一种类型中,并更改其运行时类型,包括其属性、它们的值等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2016-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多