绑定包含数组的自定义对象的可观察集合

binding observable collection of custom objects containing array

我正在学习 wpf 和绑定等等,我有一个 gridview 和一个自定义对象

我正在尝试将自定义对象列表绑定到网格,我的自定义对象是这样设计的

 Public class myObject 
  {
    protected int myInt {get; set;}
    protected ObservableCollection<string> myStrings{get;set;}
    protected double myDouble{get;set}

    public myObject(int aInt, string aString, double aDouble)
   {
    myStrings = new ObservableCollection<string>(); 
    string[] substrings = aString.split('/');
    this.myInt = aInt;


     foreach (string s in substrings)
     {
         myStrings.Add(s);
     }

     this.myDouble = aDouble;
    }

}

然后我创建了这些对象的可观察集合并将它们绑定到网格

double、int 在网格中显示得很好,但数组显示的是指针, 我有一栏填满了

  "System.Collections.ObjectModel.ObservableCollection `1[System.String]" 

谁能帮我在网格中显示 observableCollection 的内容,例如,集合中的每个项目都会有一个列。

提前致谢!

我找到了解决方案

我试过使用模板,但我不满意所以我使用了 ExpandoObjects 我首先创建了一个字典列表,其中包含我未来网格的每一行,然后使用 https://theburningmonk.com/2011/05/idictionarystring-object-to-expandoobject-extension-method/ 将它们变成 expando 对象非常感谢他的自定义方法

然后我将 ExpandoObjects 的可观察集合绑定到我的 radgridview 和 TADA 我现在有了包含动态对象的动态网格

再次感谢您的回答,我学到了一些关于模板的有用信息!

在你的情况下看起来更合适的是使用RowDetailsTemplate来定义一个子DataGrid/GridView来显示Strings集合,在与相同级别显示strings集合其他属性可能是一项艰巨的任务(而且没有多大意义)。 这里有一个如何在另一个中定义 DataGrid 的示例(同样的事情使用 GridView/ListViewDataGrid 看起来更合适)。

 <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="MyInt" Binding="{Binding  MyInt}"/>
            <DataGridTextColumn Header="MyDouble" Binding="{Binding  MyDouble}"/>
        </DataGrid.Columns>
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
               <ListView ItemsSource="{Binding MyStrings}"/>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
    </DataGrid>

我的对象

public class MyObject
{
    public int MyInt { get; set; }
    public ObservableCollection<string> MyStrings { get; set; }
    public double MyDouble { get; set; }

    public MyObject(int aInt, string aString, double aDouble)
    {
        MyStrings = new ObservableCollection<string>();
        string[] substrings = aString.Split('/');
        this.MyInt = aInt;


        foreach (string s in substrings)
        {
            MyStrings.Add(s);
        }

        this.MyDouble = aDouble;
    }

}