2009-06-16 14 views
9

WPFセットアップで単純な双方向データバインディングを使用する必要がありますが、リストボックス(ターゲット)はコレクションの変更に応じて更新されません。WPF ListBoxがItemsSourceで更新されない

lstVariable_Selected.ItemsSource = m_VariableList; 

を、次のようにリストボックスが宣言されています:

私は、プログラムのListBoxのこののItemsSourceを設定してい

私が最初ではないのItemsSource、リストボックスを(設定
  <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> 

その時に見える)は、その項目が設定されます。しかし、私がListBoxを見ると、その時点で更新が止まるようです。

次に、m_VariableListコレクションからアイテムを削除できます。リストボックスからは消えません。同様に、1つ追加すると、表示されません。

何がありますか?

+1

ItemSourceをm_VariableListにバインドするために使用するコードを投稿してください。 – micahtan

答えて

18

m_VariableListはINotifyCollectionChangedを実装していますか? ObservableCollectionでない場合、その内容の変更は自動的にUIに反映されません。

+0

これは、Rocky(http://forums.lhotka.net/forums/thread/17402.aspx)によるWPFとWinFormsの両方で動作するバインディングリストですが、INotifyCollectionChangedはWPFのみです。 –

+0

IBindingListを実装する場合、それはまったく同じように動作します。あなたがそれがうまくいくと説明したことから明らかではない何かが続いています。 – rmoore

+0

基本的な実装が変更されていることがわかりました(私に知らされていません)、IBindingListを実装しなくなりました。道徳:あなたの(私の)仮定を確認してください。 –

8

問題は、提供したXAMLにはありません。私はテストアプリケーションで同じXAMLを使用しました。しかし、m_VariableList変数を再インスタンス化することによって、発生している問題を再現することができました。

m_VariableListに新しいインスタンスが指定された場合、または新しいオブジェクトをポイントした場合、コントロールにはデータに対する独自の参照があるため、ListBoxに反映されません。これは問題の原因ではないかもしれませんが、変数が再インスタンス化されていないことを確認するためにコードビハインドを調べることをおすすめします。

+0

ありがとう、トニー。私は、ベースクラスが変更されたことを発見したときにコレクションが再インスタンス化されている可能性がある場所を把握しようとしました。 –

関連する問題