2014-12-07 45 views
0

嘿我有一個列表框,我將ItemsSource設置爲從我的數據庫的ObservableCollection對象,我需要添加一個單一的對象在此列表的末尾。但是,我不斷收到無效的操作異常。不知怎的,我的列表框在這裏使用的是我的列表框代碼(在我心目中是一個給定的,因爲它顯示並已具備內的項目。):WPF將對象添加到ListBox與現有的ItemsSource

<ListBox x:Name="CarList" SelectionChanged="ItemSelected" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Background="{x:Null}"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel FlowDirection="LeftToRight" ItemHeight="300" ItemWidth="300"/> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 

     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid Margin="10,10"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="*" /> 
         <RowDefinition Height="35" /> 
        </Grid.RowDefinitions> 
        <Image Grid.Row="0" Source="{Binding image_path}" VerticalAlignment="Stretch"/> 
        <Grid Grid.Row="1" Background="SteelBlue"> 
         <TextBlock HorizontalAlignment="Left" VerticalAlignment="Center" Margin="3" Text="{Binding model}"/> 
         <TextBlock HorizontalAlignment="Right" VerticalAlignment="Center" Margin="3" Text="{Binding price}"/> 
        </Grid> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 

我首先設置的ItemsSource就像這樣:

CarList.ItemsSource = CarController.GetAllCars(); 

,然後要加我的自定義對象是這樣的:

ListBoxItem carAdd = new ListBoxItem(); 
carAdd.Content = new CarModel{ image_path = "/../Assets/add-512.png", id=-1}; 
CarList.Items.Add(carAdd); 

但可惜最後的操作失敗此消息:

在ItemsSource正在使用時,操作無效。改爲使用ItemsControl.ItemsSource訪問和修改 元素。

我已經尋找了一些其他的建議,但在他們的例子中都使用字符串和單個綁定,因此我一直無法弄清楚究竟要做什麼。如果有人有一個建議,將不勝感激。

- 謝謝。

回答

4

你需要將項目添加到項目源,源應該觀察到,這樣的ListBox採取新項目考慮:

var cars = new ObservableCollection<CarModel>(CarController.GetAllCars()); 
CarList.ItemsSource = cars; 

... 

var car = new CarModel{ image_path = "/../Assets/add-512.png", id=-1}; 
cars.Add(car); 
+0

哦 - 這非常有意義。現在當閱讀其他答案和指導時,我終於明白了這一點。不知何故,這飛到了我的頭上。 – Swidtter 2014-12-07 23:08:17

相關問題