2010-11-15 75 views
2

我有一个proprty o类型“Observable集合”...当我添加一个项目时,它不是反映在UI中的geeting ...什么是做错了...?Observable集合中的更改未反映在UI中

<ComboBox Grid.Column="0" Grid.Row="3" 
Width="120" SelectedIndex="0" 
Margin="5,0,0,0" HorizontalAlignment="Left" 
ItemsSource="{Binding AllPlaces}" 
DisplayMemberPath="PlaceName" 
SelectedItem="{Binding Path=SelectedPlace.Value, Mode=TwoWay}" 
VerticalAlignment="Top"> 
</ComboBox> 


// Add the new item to the existing place list, so that it will be refreshed. 
ObservableCollection<PlaceDto> existingPlaceList = new ObservableCollection<PlaceDto>(); 
// Copy all places to a temperory list. 
foreach(PlaceDto placeItem in AllPlaces) 
{ 
existingPlaceList.Add(placeItem); 
} 
// Add new place to existing list 
existingPlaceList .Add(newPlace); 
AllPlaces= existingPlaceList; 
+0

请在xaml中显示绑定并添加一个元素。 – Femaref 2010-11-15 00:19:29

+1

你为什么要把所有的地方都复制到一个临时列表中?只需将该地点添加到AllPlaces即可。 AllPlaces.Add(newPlace)。剩下的就不需要了。并在构造函数中初始化AllPlaces变量。 – 2010-11-15 00:46:36

回答

5

如果列表更改,ObservableCollection将通知GUI。但是,您正在使用AllDivisions = existingPlaceList行来更改整个列表本身。您必须为包含AllDivisions属性的类实现INotifyPropertyChanged,才能在换出列表时告诉GUI。

+1

绝对正确。他应该增加现有的可观察集合。更改参考不起作用。 – Aliostad 2010-11-15 00:47:44

+0

我只是想添加新的项目列表。如果我只使用这一行=> AllPlaces.Add(newPlace); ..它会工作吗? – Relativity 2010-11-15 00:48:19

+0

@Anish:删除AllPlaces = existingPlaceList赋值并使用AllPlaces作为公共属性,并返回existingPlaceList,同时使现有PlaceList成为类实例变量,如果必须清空它,请使用Clear(),而不是每次创建新列表。 – BrokenGlass 2010-11-15 00:50:00

相关问题