2009-06-16 5 views
9

WPF 설정에서 간단한 양방향 데이터 바인딩이되어야한다고 생각하지만 목록 상자 (대상)가 컬렉션 변경 사항으로 업데이트되지 않습니다.WPF ListBox가 ItemsSource로 업데이트되지 않습니다.

lstVariable_Selected.ItemsSource = m_VariableList; 

을 다음과 같이리스트 박스는 선언 :

나는 프로그래밍 목록 상자의 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 컬렉션에서 항목을 제거 할 수 있으며 ListBox에서 사라지지 않습니다. 마찬가지로, 하나 추가하면 나타나지 않습니다.

무엇을 제공합니까?

+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 전용 인 BindingList 입니다. –

+0

IBindingList를 구현하면 동일하게 작동합니다. 거기에 뭔가 다른 일이 일어날 것이라고 설명했던 것에서 명백하지 않습니다. – rmoore

+0

기본 구현이 변경되었다는 사실이 밝혀졌으며 (더 이상 알지 못한다.) 내가 생각할 때 IBindingList를 더 이상 구현하지 않았다. 도덕 : 귀하의 (내) 가정을 확인하십시오. –

8

제공 한 XAML에 문제가 없습니다. 테스트 애플리케이션에서 동일한 XAML을 성공적으로 사용했습니다. 그러나 m_VariableList 변수를 다시 인스턴스화하여 발생한 문제를 복제 할 수있었습니다.

m_VariableList에 새 인스턴스가 지정되거나 새 개체를 가리키면 컨트롤에 데이터에 대한 자체 참조가 있으므로 ListBox에 반영되지 않습니다. 이것은 문제의 원인이 아닐지 모르지만 변수가 다시 인스턴스화되지 않도록 코드 숨김을 살펴 보는 것이 좋습니다.

+0

고마워, 토니. 나는베이스 클래스가 변경되었다는 것을 발견했을 때 콜렉션이 어디에서 다시 인스턴스화되어 왔는지 알아 내려고 애썼다. –

관련 문제