【发布时间】:2011-03-03 15:16:24
【问题描述】:
更新:请参阅此问题的底部,了解我为解决问题所做的工作。
我试图了解 ItemsSource 和 DataContext 属性在 Silverlight 工具包 DataGrid 中的工作原理。我目前正在处理虚拟数据,并尝试在组合框的值更改时获取 DataGrid 中的数据以更新。
我的 MainPage.xaml.vb 文件目前如下所示:
Partial Public Class MainPage
Inherits UserControl
Private IssueSummaryList As List(Of IssueSummary)
Public Sub New()
GetDummyIssueSummary("Day")
InitializeComponent()
dgIssueSummary.ItemsSource = IssueSummaryList
'dgIssueSummary.DataContext = IssueSummaryList '
End Sub
Private Sub GetDummyIssueSummary(ByVal timeInterval As String)
Dim lst As New List(Of IssueSummary)()
'Generate dummy data for lst '
IssueSummaryList = lst
End Sub
Private Sub ComboBox_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs)
Dim cboBox As ComboBox = CType(sender, ComboBox)
Dim cboBoxItem As ComboBoxItem = CType(cboBox.SelectedValue, ComboBoxItem)
GetDummyIssueSummary(cboBoxItem.Content.ToString())
End Sub
End Class
我的 XAML 目前正在寻找 DataGrid:
<sdk:DataGrid x:Name="dgIssueSummary" AutoGenerateColumns="False" >
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Binding="{Binding ProblemType}" Header="Problem Type"/>
<sdk:DataGridTextColumn Binding="{Binding Count}" Header="Count"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
问题是,如果我将数据网格的ItemsSource属性的值设置为等于IssueSummaryList,它会在加载时显示数据,但在底层IssueSummaryList集合时不会更新变化。如果我将网格的DataContext设置为IssueSummaryList,渲染时不会显示任何数据。
我一定不明白ItemsSource 和DataContext 应该如何工作,因为当我将List 对象分配给它们时,我希望其中一个属性“正常工作”。我需要了解和更改我的代码中的哪些内容,以便随着List 中的数据更改,网格中的数据也会更新?
这是我为解决问题所做的:
- 首先,我将
IssueSummaryList更改为System.Collections.ObjectModel.ObservableCollection类型。当从集合中添加或删除项目时,ObservableCollection对象会引发事件,告诉数据网格刷新其视图。 - 接下来,我将
GetDummyIssueSummary()方法更改为直接修改IssueSummaryList,而不是将其设置为List或ObservableCollection的新实例。
这两个更改允许在组合框更改时刷新数据网格。
【问题讨论】:
标签: .net vb.net silverlight data-binding xaml