【问题标题】:How to Change Table on ListView Binding Dynamically如何动态更改 ListView 绑定上的表
【发布时间】:2017-10-31 22:24:09
【问题描述】:

我通过删除现有列并根据给定表添加新列来动态生成 GridView。它显示了数据,但我在即时窗口中遇到了大量错误。

System.Windows.Data 错误:39:BindingExpression 路径错误:在“对象”“DataRowView”(HashCode=39346072)上找不到“MainPartnerName”属性。 BindingExpression:Path=MainPartnerName; DataItem='DataRowView' (HashCode=39346072);目标元素是'TextBlock'(名称='');目标属性是“文本”(类型“字符串”)

Private Sub SetupGridView(ByVal objTable As Object)
    'remove existing columns
    Dim gv As GridView = lvClientsView.View
    For x As Integer = gv.Columns.Count - 1 To 0 Step -1
        gv.Columns.RemoveAt(x)
    Next

    'add new column for each column in table
    For Each col As DataColumn In objTable.Columns
        Dim gvCol As GridViewColumn = Nothing
        gvCol = New GridViewColumn
        gvCol.Header = col.ColumnName
        gvCol.DisplayMemberBinding = New Binding(col.ColumnName)
        gv.Columns.Add(gvCol)
    Next

    Dim bnd As New Binding
    bnd.Source = objTable
    lvClientsView.SetBinding(ListView.ItemsSourceProperty, bnd)

End Sub

我的 XAML 很简单:

<ListView Name="lvClientsView" DockPanel.Dock="Top"  >
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <EventSetter Event="PreviewMouseLeftButtonDown" Handler="lvClientsViewItem_PreviewMouseLeftButtonUp"  />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
        </GridView>
    </ListView.View>
</ListView>

我正在动态拆除和重建视图。如何删除表格和绑定,以便分配不同的表格和绑定?

【问题讨论】:

  • 为什么 objTable 是一个对象?你没有专门的课程吗?
  • @Isma 我有两个不同的表,列名不同。所以我的问题是“如何删除与第一个表相关的所有内容,以便它可以从头开始重建”?

标签: wpf vb.net


【解决方案1】:

最后我发现我需要做四件事:

  1. 设置没有数据的新空白绑定
  2. 删除现有的 GridView 并替换为新的
  3. 为每个新表定义添加新列
  4. 设置绑定到新表

    Private Sub SetupGridView(ByVal objTable As Object)
    
        'set binding to new blank binding with no data
        lvClientsView.SetBinding(ListView.ItemsSourceProperty, New Binding)
    
        'remove existing gridview and replace with new one
        lvClientsView.View = Nothing
        Dim gv As New GridView
        lvClientsView.View = gv
    
        'add new column for each column in table
        For Each col As DataColumn In objTable.Columns
            Dim gvCol As GridViewColumn = Nothing
            gvCol = New GridViewColumn
            gvCol.Header = col.ColumnName
            gvCol.DisplayMemberBinding = New Binding(col.ColumnName)
            gv.Columns.Add(gvCol)
        Next
    
        'set new binding to objTable
        Dim bnd As Binding = New Binding
        bnd.Source = objTable
        lvClientsView.SetBinding(ListView.ItemsSourceProperty, bnd)
    
    End Sub
    

    效果很好!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2014-04-07
    • 2015-03-19
    相关资源
    最近更新 更多