我有一个主窗口,上半部分有一个数据网格,下半部分有一个tabcontrol。 datagrid包含公司列表。下方tabcontrol的其中一个选项卡包含有关与上部数据网格中所选公司对应的联系人的信息。
在选项卡上,我放置了一个用户控件。
<TabItem Name="pgContactsXCompany">
<local:ContactsXCompany x:Name="contactsXCompany"/>
</TabItem>
usercontrol“ContactsXCompany”上有一个数据网格,其中包含与所选公司对应的联系人列表。
<dg:DataGrid Name="dgContactsXCompanyList"
ItemsSource = "{Binding}"
AutoGenerateColumns="False"
IsReadOnly="True">
<dg:DataGrid.Columns>
<dg:DataGridTextColumn Header="Id" Width="Auto" Binding="{Binding Path=intIDContact}" Visibility="Hidden" />
<dg:DataGridTextColumn Header="Jméno" Width="Auto" Binding="{Binding Path=txtName}" />
<dg:DataGridTextColumn Header="Příjmení" Width="Auto" Binding="{Binding Path=txtSurname}" />
<dg:DataGridTextColumn Header="Pobočka" Width="Auto" Binding="{Binding Path=txtBranchOffice}" />
<dg:DataGridTextColumn Header="Město" Width="Auto" Binding="{Binding Path=txtTown}" />
</dg:DataGrid.Columns>
</dg:DataGrid>
联系人由一个函数加载,该函数将所选公司的ID作为参数(公司的SAP编号)。
问题是如何将在上层数据网格中选择的公司的SAP编号传递给usercontrol。我创建了一个代表:
Public Delegate Sub CompanyContactsUpdate(ByVal sap As String)
然后在主窗口上,在公司datagrid的SelectionChanged Sub中我放置了以下代码:
Dim doUpdate As CompanyContactsUpdate
Dim obj As New ContactsXCompany
doUpdate = New CompanyContactsUpdate(AddressOf obj.UpdateContactsXCompanyDatagrid)
doUpdate.Invoke(grid.SelectedItem.txtSap)
函数UpdateContactsXCompanyDatagrid在usercontrol上定义:
Public Class ContactsXCompany
Public Sub UpdateContactsXCompanyDatagrid(ByVal Sap As String)
Dim d As New ContactPersonViewModel
Me.dgContactsXCompanyList.DataContext = d.GetContacts(Sap)
End Sub
End Class
当我运行应用程序时,一切正常运行。所选公司的Sap编号正确传递给函数UpdateContactsXCompanyDatagrid。似乎已分配了Me.dgContactsXCompanyList.DataContext,但联系人的datagrid是EMPTY。没有行显示。
我应该在哪里搜索问题? 非常感谢你的帮助!
答案 0 :(得分:0)
通过调用 ContactPersonViewModel.GetContacts() 返回的收集类型是什么?
我认为它需要是一个ObservableCollection,或其他一些实现INotifyCollectionChanged的集合。