gpt4 book ai didi

Silverlight:如何将 List 绑定(bind)到数据网格

转载 作者:行者123 更新时间:2023-12-03 10:20:41 25 4
gpt4 key购买 nike

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 绑定(bind)到 View 的 DataContext 属性。

此集合(SquadPlayers)在创建后未更改,因此我想将其类型更改为
List<SquadPlayerViewModel>

.当我这样做时,我还添加了
RaisePropertyChanged("SquadPlayers")

在“_model_DataReceivedEvent”方法的末尾(通知网格列表数据已更改。

问题是,在初始显示网格不显示任何记录......只有当我点击任何列标题时,它才会“排序”并显示列表中的所有项目......

问题1:为什么datagrid最初不包含项目?
Q2:如何让它们自动显示?

谢谢。

附言这是我的 View 模型中新 List 对象的声明:
        public List<SquadPlayerViewModel> SquadPlayers { get; set; }

最佳答案

您不能将 List 用作绑定(bind)源,因为 List 未实现 INotifyCollectionChanged,因此 WPF/Silverlight 需要了解集合的内容是否更改。 WPF/Sivlerlight 比可以采取进一步的行动。

我不知道为什么你需要 List<> 在你的 View 模型上,但是如果出于抽象原因你可以使用 IList<> 代替。但请确保将 ObservableCollection<> 的实例放在上面,而不是 List<>。不管你在你的 ViewModel 中使用了什么类型,Binding 只关心运行时类型。

所以你的代码应该是这样的:

//Your declaration
public IList<SquadPlayerViewModel> SquadPlayers { get; set; }
//in your implementation for WPF/Silverlight you should do
SquadPlayers = new ObservableCollection<SquadPlayerViewModel>();
//but for other reason (for non WPF binding) you can do
SquadPlayers = new List<SquadPlayerViewModel>();

我通常使用这种方法来抽象 NHibernate 返回的“代理”域模型。

关于Silverlight:如何将 List<T> 绑定(bind)到数据网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com