MVVM模式在我的Silverlight4應用程序中實現。Silverlight:如何綁定列表<T>到數據網格
本來,我在我的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代碼電網peacie顯示:
xmlns:DataControls="clr-namespace:System.Windows.Controls;
assembly=System.Windows.Controls.Data"
...
<DataControls:DataGrid ItemsSource="{Binding SquadPlayers}">
...</DataControls:DataGrid>
和我的視圖模型被綁定到DataContext屬性風景。
此集合(SquadPlayers)創建後沒有改變,所以我想它的類型改爲
List<SquadPlayerViewModel>
。當我這樣做,我也在「_model_DataReceivedEvent」方法結束時加入
RaisePropertyChanged("SquadPlayers")
(以通知列表數據被改變的網格。
的問題是,在初始顯示網格不顯示任何記錄...只有當我點擊任何列標題時,它會做'排序'並顯示列表中的所有項目...
問題1:爲什麼datagrid最初不包含項目? Q2:如何製作他們自動顯示?
謝謝。
P.S.這是新的列表對象在我的視圖模型聲明:
public List<SquadPlayerViewModel> SquadPlayers { get; set; }
如果我正確理解,如果我想使用List <>作爲綁定目的,解決方法(RaisePropertyChanged(「SquadPlayers」);)將無濟於事。對? 謝謝。 – Budda 2010-08-24 11:56:38
是和否,是的,如果您爲'SquadPlayers.Add(blah..blah)'分配了'SquadPlayers = blah .. blah..',但沒有。標記'RailsPropertyChanged(「SquadPlayers」)'收集'SquadPlayers'實例更改爲新的時候工作,但這還不夠,因爲收集需要通知天氣其項目已更改(添加或刪除)。 – ktutnik 2010-08-24 12:50:07
有區別,...我看到的第一個問題:我通知集合發生了變化,但實際上集合是相同的,只有其中的項目發生了變化。今天我將嘗試替換集合(但我想,這將打破所有綁定)。所以我需要通知集合項目已更改...並且如果我正確理解 - 這對List <>是不可能的。我對嗎? – Budda 2010-08-25 19:47:47