我有一个主窗口,上半部分是数据网格,下半部分是选项卡控件。数据网格包含一个公司列表。下方选项卡控件的其中一个页签包含与上方数据网格中所选公司对应的联系人信息。
在选项卡上,我放置了一个用户控件。
<TabItem Name="pgContactsXCompany">
<local:ContactsXCompany x:Name="contactsXCompany"/>
</TabItem>用户控件"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编号)作为参数。
问题是如何将在上面的datagrid中选择的公司的SAP编号传递给用户控件。我创建了一个代理:
Public Delegate Sub CompanyContactsUpdate(ByVal sap As String)然后,在主窗口的companies数据网格的SelectionChanged子窗口中,我放置了以下代码:
Dim doUpdate As CompanyContactsUpdate
Dim obj As New ContactsXCompany
doUpdate = New CompanyContactsUpdate(AddressOf obj.UpdateContactsXCompanyDatagrid)
doUpdate.Invoke(grid.SelectedItem.txtSap)函数UpdateContactsXCompanyDatagrid在用户控件上定义:
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为空。不显示任何行。
我应该在哪里搜索问题?非常感谢你的帮助!
发布于 2011-08-19 10:07:54
调用ContactPersonViewModel.GetContacts()返回的集合类型是什么?
我相信它需要是一个ObservableCollection,或者实现INotifyCollectionChanged的其他集合。
https://stackoverflow.com/questions/7049922
复制相似问题