2009-06-16 118 views
9

我相信應該是WPF設置中的簡單雙向數據綁定,但列表框(目標)不隨集合更改而更新。WPF列表框不與ItemsSource更新

我編程設定ListBox的的ItemsSource這樣:

lstVariable_Selected.ItemsSource = m_VariableList; 

而ListBox的聲明如下:

  <ListBox Margin="5" Name="lstVariable_Selected"> 
       <ListBox.ItemsPanel> 
       <ItemsPanelTemplate> 
        <VirtualizingStackPanel Orientation="Horizontal"/> 
       </ItemsPanelTemplate> 
       </ListBox.ItemsPanel> 
       <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Border BorderBrush="Gray" BorderThickness="1" Margin="0"> 
         <TextBlock FontSize="25" Text="{Binding Path=Name}" /> 
        </Border> 
       </DataTemplate> 
       </ListBox.ItemTemplate> 
      </ListBox> 

當我最初設置的ItemsSource,列表框(這是不當時可見)獲取其項目設置。但是,如果我查看ListBox,更新似乎停止在這一點上。

我可以從m_VariableList集合中刪除一個項目,它不會從ListBox中消失。同樣,如果我添加一個,它不會出現。

什麼給?

+1

請將您用來將ItemSource綁定到m_VariableList的代碼。 – micahtan 2009-06-16 22:02:20

回答

18

您的m_VariableList是否實施了INotifyCollectionChanged?如果它不是ObservableCollection,那麼對其內容的更改不會自動反映在UI中。

+0

這是一個BindingList ,它根據Rocky(http://forums.lhotka.net/forums/thread/17402.aspx)與WPF和WinForms協同工作,而INotifyCollectionChanged是WPF專用的。 – 2009-06-16 20:59:23

+0

如果它實現了IBindingList,那麼它的工作原理是一樣的。還有其他的事情正在發生,從你所描述的那一點來看,這並不明顯。 – rmoore 2009-06-16 21:41:06

8

問題不在於您提供的XAML中。我在測試應用程序中成功使用了相同的XAML;不過,我可以通過重新實例化m_VariableList變量來複制您遇到的問題。

當m_VariableList被賦予一個新的實例或指向一個新的對象時,它不會反映在ListBox中,因爲該控件擁有自己對數據的引用。這可能不是你的問題的原因,但我建議查看你的代碼隱藏,以確保變量沒有得到重新實例化。