Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.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
Wpf 按位置在Datagrid上绑定Xaml的数组_Wpf_Silverlight_Xaml_Datagrid_Binding - Fatal编程技术网

Wpf 按位置在Datagrid上绑定Xaml的数组

Wpf 按位置在Datagrid上绑定Xaml的数组,wpf,silverlight,xaml,datagrid,binding,Wpf,Silverlight,Xaml,Datagrid,Binding,我有一个字符串数组列表作为输入。对于所有列表,数组维度都是静态的,但在检索列表之前,我无法知道数组大小。 我需要将列表绑定到Silverlight中的datagrid中 我试图在运行时创建列,将每个列绑定到特定的数组位置,但找不到方法 你知道怎么做吗 我最终可以将我的数组列表“转换”到任何可以绑定到datagrid中的东西中 想法是在Silverlight中的datagrid中显示一种2d矩阵(我认为问题类似) 列表 column_1 column_2 column_3

我有一个字符串数组列表作为输入。对于所有列表,数组维度都是静态的,但在检索列表之前,我无法知道数组大小。 我需要将列表绑定到Silverlight中的datagrid中

我试图在运行时创建列,将每个列绑定到特定的数组位置,但找不到方法

你知道怎么做吗

我最终可以将我的数组列表“转换”到任何可以绑定到datagrid中的东西中

想法是在Silverlight中的datagrid中显示一种2d矩阵(我认为问题类似)

列表

 column_1      column_2       column_3   ..   column_m

string[1,1]   string[1,2]    string[1,3] ..  string[1,m]
string[2,1]   string[2,2]    string[2,3] ..  string[2,m]
string[3,1]   string[3,2]    string[3,3] ..  string[3,m]
....
string[n,1]   string[n,2]    string[n,3] ..  string[n,m]
n是列表长度,m是列表列的最大编号


任何想法都值得赞赏

不幸的是,这并不容易

您是否有任何有效的约束,例如允许的最大列数或类似的限制? 如果您这样做(假设您有N列最大值),您可能可以通过

  • 有一个公开N的类 属性(命名为Col1…ColN用于 示例)映射内容 列上一行的数组的 X
  • 生成该类的列表, 每行一个实例
  • 生成正确数量的 动态列,绑定每个 列到属性ColX
  • 将DataGrid绑定到该列表
  • 这有点难看,但它会起作用

    如果您不必依赖DataGrid,则可以使用UniformGrid。UniformGrid是在规则网格中布局其子项的面板(每个项具有相同的宽度,每个项具有相同的高度)。您可以在运行时指示列数,面板将依次容纳子级,直到列数,然后继续另一行。 您可以将ItemsControl绑定到数组,指示它应该使用UniformGrid作为其布局面板,并指示适当的ItemTemplate来呈现每个字符串


    第二个选项要简单得多,但您将不具备DataGrid的功能,如排序、移动列、行选择、每行编辑事件等。

    我在Denis的答案中找到了两种使用模式的解决方案:

    • 第一种方法是使用反射在运行时为绑定生成一个类,如中所建议的(多亏了Vladimir Bodurov)。我已经测试了这个解决方案,我将尝试在我的项目中使用它。目前唯一的问题是,对于大型集合,性能很差。但我希望有人能在下一个版本中修复它(Silverlight3似乎还没有修复这个问题)

    • 第二种解决方案是使用一些动态语言来生成数据。我不知道这是否会更快(可能不会),但最终会有所帮助。我将在将来尝试使用ironpython或ruby生成绑定到datagrid中的类

    如果有人尝试使用第二种解决方案或任何与性能相关的关于在运行时创建类的信息,将不胜感激


    乔治

    谢谢你的回答。我会试着用第一个。。不幸的是,我需要datagrid的内置行为。我还找到了关于我的问题的另一个答案:。再次感谢弗拉基米尔的文章太棒了。。。正是[Silverlight中的SQL]所需要的,我必须更新这里发布的Vladimir的通用字典代码