【问题标题】:populate listview dynamically动态填充列表视图
【发布时间】:2011-05-01 14:34:32
【问题描述】:

如果我将数据表绑定到 WPF Toolkit-data-grid .....不需要在那里指定列名...它将自动从数据表中获取。

但是,如果我将列表视图绑定到可观察集合...我必须一一指定每一列的列标题名称..在 xaml 文件中。

所以如果我有一个列名列表 ->List<ColumnHeaderNames> 随着 要填充的项目列表 ->List<Object to populate list>

我可以将项目列表绑定到列表视图...并将列名列表绑定到列表视图标题...但我不知道列表视图中是否有任何属性...绑定我的标题。

也就是说……

我有一个用户控件,其中有 2 个列表视图...一个可用,另一个被选中。我需要这个用户控件是可重复使用的......这意味着......如果我正在绑定一个列表......列表应该包含两列......第一列名称为“州”,第二列名称为“县”。但是,如果我要绑定一个类似 .. 的列表,那么 listview shud 包含 3 列...列名称为水果、颜色和价格。

【问题讨论】:

    标签: wpf listview mvvm binding header


    【解决方案1】:

    我认为最适合您的是将 ListView 的 View 属性设置为 GridView。然后您可以轻松绑定列标题:

      <ListView ItemsSource="{Binding ListOfValues}">
                <ListView.View>
                    <GridView >                
                        <GridViewColumn DisplayMemberBinding="{Binding XVal}" Header={binding header}"/>
                    </GridView>
                </ListView.View>
            </ListView>
    

    更多信息你可以去http://msdn.microsoft.com/en-us/library/system.windows.controls.gridview.aspx

    【讨论】:

    • 您的意思是 Header={binding header} 中的“标题”是列列表。
    • 如果“header”是项目列表中的项目属性之一(例如 XVal),是的。否则,您可以更改 Header 的绑定源,但不要忘记在列表的当前项上设置 DataContext。
    • 我在源列表中有不止一列...不是单列。我需要动态生成网格列
    • 哦,对不起,我不明白你的问题。我认为,在您的项目中添加一个属性(例如称为标题)会容易得多。否则,正如我所说,您必须更改 Header 的绑定源
    • 如何改变网格的来源???我的要求是……我有一个用户控件,其中我有 2 个列表视图……一个可用,另一个被选中。我需要这个用户控件是可重复使用的......这意味着......如果我绑定一个像 这样的列表......列表应该包含两列......第一列名称为“state”,第二列列名称为“县”。但是,如果我要绑定一个像 这样的列表..然后 listview shud 包含 3 列...列名称为水果、颜色和价格。
    【解决方案2】:

    如果您使用包含列表和名称的结构:

    然后:

       <ItemsControl ItemsSource="{Binding ListOfStruct}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ListView ItemsSource="{Binding ListOfitem}">
                    <ListView.View>
                        <GridView>
                            <GridViewColumn DisplayMemberBinding="{Binding}" Header="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ListView}, Path=DataContext.Header}"/>
                        </GridView>
                    </ListView.View>
                </ListView>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    

    这不是最好的方法,但我不知道该怎么做

    【讨论】:

    • 你用这种方式做什么?...你是在创建网格视图列表吗?
    • 列表视图列表,其中视图属性设置为仅包含一列的gridViw
    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    相关资源
    最近更新 更多