Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定包含数组的自定义对象的可观察集合_C#_Wpf_Mvvm_Expandoobject_Dynamicobject - Fatal编程技术网

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

C# 绑定包含数组的自定义对象的可观察集合,c#,wpf,mvvm,expandoobject,dynamicobject,C#,Wpf,Mvvm,Expandoobject,Dynamicobject,我正在学习wpf和绑定以及所有这些,我有一个gridview和一个自定义对象 我正在尝试将自定义对象列表绑定到网格我的自定义对象是这样设计的 Public class myObject { protected int myInt {get; set;} protected ObservableCollection<string> myStrings{get;set;} protected double myDouble{get;set} pu

我正在学习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;
    }

}
有人能帮我在网格中显示observableCollection的内容吗?比如,集合中的每一项都会有一列

提前谢谢

我找到的解决办法

我试着使用模板,但我不喜欢,所以我使用了ExpandoObjects 我首先创建了一个包含我未来网格中每一行的字典列表,然后将它们转换成expando对象,这要感谢他出色的自定义方法

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


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

在您的情况下,更合适的方法是使用RowDetailsTemplate定义子DataGrid/GridView来显示字符串集合,在与其他属性相同的级别上显示字符串集合可能是一项困难的任务,没有多大意义。 这里是一个如何使用GridView/ListView在另一个同一事物中定义DataGrid的示例,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;
    }

}

你打算怎么做?列标题应该是什么?如何处理不同大小的集合?至少我可以说,这不是现成的。您的所有myObject项在MyString集合中的项数是否相同?不相关:建议遵循。实际上,在这种情况下,双精度/int和字符串都不能显示。您将它们标记为受保护。WPF绑定要求属性必须是公共的,才能绑定到它们。它们在我的代码中实际上是公共的,只是认为这不适合封装,所以当我为这篇文章重写代码时,我让它们受到保护。但是读了你所有的评论,我意识到这是行不通的。我可以不使用字符串数组,而是根据需要声明尽可能多的字符串,但我不会满足,我正在搜索动态对象,不知道这是否有助于解决我的问题。此外,如上面注释中所述,属性应该是公共的,为了能够绑定它们。还应该包括INotifyPropertyChanged的实现。@XAMlMAX
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;
    }

}