Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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# DataGrid如何绑定到任何集合的属性?_C#_Wpf_Binding_Datagrid - Fatal编程技术网

C# DataGrid如何绑定到任何集合的属性?

C# DataGrid如何绑定到任何集合的属性?,c#,wpf,binding,datagrid,C#,Wpf,Binding,Datagrid,我正在制作一个WPF用户控件,我希望在绑定的意义上具有与DataGrid控件类似的行为。我的问题是:DataGrid如何知道如何绑定到IEnumerable类型的任何集合?例如:可以将DataView作为ItemsSource传递,也可以传递任何对象集合。DataGrid如何决定是绑定到DataView的列,还是仅通过查看以下内容来绑定到object的属性: <DataGridTextColumn Binding="{Binding **Path=SomePropertyOrColumn*

我正在制作一个WPF用户控件,我希望在绑定的意义上具有与DataGrid控件类似的行为。我的问题是:DataGrid如何知道如何绑定到IEnumerable类型的任何集合?例如:可以将DataView作为ItemsSource传递,也可以传递任何对象集合。DataGrid如何决定是绑定到DataView的列,还是仅通过查看以下内容来绑定到object的属性:

<DataGridTextColumn Binding="{Binding **Path=SomePropertyOrColumn**}"/>


提前谢谢。

我想:


您可以获取其
集合
的元素的
类型
,该类型的
类型
具有方法,该方法返回其类型中可用的所有公共属性,并且在其知道所有公共属性后,可以与它们绑定

这是一个复杂的区域;下面是winforms绑定的分解,但我知道WPF绑定并没有那么不同

  • 给定一个对象,绑定代码要做的第一件事就是查找
    IListSource
    ——如果是这样,则使用
    GetList()
    获取实际绑定(这就是数据表如何成为绑定目的的数据视图)
  • 之后,通常会检查源的
    ITypedList
    ;这是获取模型表示的伪属性(
    GetItemProperties()
    )的一种灵活方式;数据视图实现了
    ITypedList
    ,为每个实例创建伪属性
  • 否则,可能会识别数据的明显类型,这意味着:
    • 查找形式为
      public SomeType this[int index]{get;}
      的索引器-请注意,大多数集合都会满足此条件
    • (不由winforms完成,但可能用于WPF)通过反射解析
      IList
      IEnumerable
      中的
      T
      ,如果对象实现了这些接口
    • 从sorce中获取第一个对象(如果有),并使用
      GetType()
  • 一旦知道类型,
    TypeDescriptor.GetProperties(type)
    就可以用来获取属性;在许多情况下,这将通过反射实现,但也可以添加间接层(通过
    TypeDescriptionProvider
    )来提供类型的属性(可以在运行时添加,这非常方便)
  • 在单个绑定(非列表绑定)的情况下,还有
    TypeDescriptor.GetProperties(obj)
    ——除了反射和
    TypeDescriptionProvider
    ,它还支持
    ICustomTypeDescriptor
    ,可由单个对象实现,以在运行时提供自定义属性(与
    TypeDescriptionProvider
    非常相似,但由单个对象负责属性)

我不知道这在多大程度上适用于WPF绑定,但我非常确定
IListSource
ITypedList
处理是相同的。从内存来看,大多数(全部?)winforms策略的一部分将在WPF上工作-因此可能是这样,并且更改是附加的挂钩。

检查这一点,@Sandeep G B这不是我的问题。我知道如何进行绑定,我想知道DataGrid如何在内部对任何对象进行绑定。是的,但它如何对DataView工作?它是DataRowView对象的集合,以及那些objects没有列属性,它们仍然绑定到列。我认为这篇文章应该会有所帮助。字段(字符串)-可以搜索吗?谢谢,你的回答告诉了我如何解决我的问题。