【发布时间】:2011-03-29 21:11:59
【问题描述】:
MVVM 模式在我的 Silverlight4 应用程序中实现。
最初,我在 ViewModel 中使用 ObservableCollection 对象:
public class SquadViewModel : ViewModelBase<ISquadModel>
{
public SquadViewModel(...) : base(...)
{
SquadPlayers = new ObservableCollection<SquadPlayerViewModel>();
...
_model.DataReceivedEvent += _model_DataReceivedEvent;
_model.RequestData(...);
}
private void _model_DataReceivedEvent(ObservableCollection<TeamPlayerData> allReadyPlayers, ...)
{
foreach (TeamPlayerData tpd in allReadyPlayers)
{
SquadPlayerViewModel sp = new SquadPlayerViewModel(...);
SquadPlayers.Add(sp);
}
}
...
}
这是用于网格显示的 XAML 代码:
xmlns:DataControls="clr-namespace:System.Windows.Controls;
assembly=System.Windows.Controls.Data"
...
<DataControls:DataGrid ItemsSource="{Binding SquadPlayers}">
...</DataControls:DataGrid>
我的 ViewModel 绑定到视图的 DataContext 属性。
此集合(SquadPlayers)在创建后没有更改,因此我想将其类型更改为
List<SquadPlayerViewModel>
。当我这样做时,我还添加了
RaisePropertyChanged("SquadPlayers")
在 '_model_DataReceivedEvent' 方法的末尾(通知网格列表数据已更改。
问题是,在初始显示网格不显示任何记录...只有当我点击任何列标题时,它才会“排序”并显示列表中的所有项目...
问题1:为什么datagrid最初不包含项目? Q2:如何让它们自动显示?
谢谢。
附:这是我的视图模型中新 List 对象的声明:
public List<SquadPlayerViewModel> SquadPlayers { get; set; }
【问题讨论】:
标签: silverlight mvvm datagrid silverlight-4.0 observablecollection