绑定包含数组的自定义对象的可观察集合
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
/ListView
,DataGrid
看起来更合适)。
<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;
}
}
我正在学习 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
/ListView
,DataGrid
看起来更合适)。
<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;
}
}