2011-12-31 2 views
1

간단한 데이터 탐색 명령으로 간단한 MVVM WPF 응용 프로그램을 구현할 예정입니다. 를 Where 절을WPF ListBox에 새 목록을 설정하는 방법은 무엇입니까?

<TextBox Grid.Column="2" Grid.Row="6" Margin="0,5,10,5" Name="textBoxWhereClause" /> 

명씩 ObservableCollection에이를 삽입하는 텍스트 상자이 외에

은 목록 상자

<ListBox x:Name="listBoxPersons" ItemsSource="{Binding Path=Persons}" SelectedIndex="{Binding Path=SelectedPerson, Mode=OneWayToSource}" Grid.Column="1" Grid.Row="0" Grid.ColumnSpan="2" Margin="0,10,10,5" IsSynchronizedWithCurrentItem="True"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

와 XAML 창 있습니다. 나는 사람들을 위해 단순한 추가/삭제/변경 명령을 구현했다. 이 작동합니다.

질문 : 사용자가 완전히 새로운 컬렉션을 생성하는 새로운 쿼리를 수행하면 어떻게해야합니까? 어떻게 새 컬렉션을 동적으로 목록 상자에 바인딩 할 수 있습니까?

저는 WPF 초심자이며 무력합니다.

도움을 주신 분께 감사드립니다.

+1

사용자 컬렉션을 지우고 빈 컬렉션을 새 결과로 채울 수 있습니다. – BigL

+0

네, 고마워요, 사실이긴하지만 테이블에는 약 5 만 명이 있습니다. 이로 인해 성능이 저하 될 수 있습니다. – PeterP

+1

Haris Hassan이 대답했듯이 바인딩 된 컬렉션을 새로로드 된 컬렉션으로 쉽게 변경할 수 있습니다. 그리고 아마도 당신의 퍼포먼스를 해결하기 위해 새로운 컬렉션을 백그라운드에서 다른 작업으로로드 할 수 있습니다. – BigL

답변

1

How can I bind the new collection dynamically to the listbox?

당신은 바인딩을 재설정 할 필요가 없습니다. 바인딩이 이미 있으므로 바인딩 소스 만 업데이트하면됩니다.

은 단순히 당신이 당신의보기 모델이 비슷한 있어야합니다

private ObservableCollection<Person> _Person ; 
public ObservableCollection<Person> Person 
{ 
    get 
    { 
     return _Person; 
    } 
    set 
    { 
     _Person = value; 
     OnPrpertyChanged("Person"); 
    } 
} 

당신이 Person = YourNewCollection; // 새로 검색 결과를 할 수있는 새로운 검색 결과

으로 Persons 수집을 교체해야

but there are about 50,000 persons in the table. This could result in performance difficulties

두 가지 작업을 수행 할 수 있습니다.

1) 한 번에 제한된 수의 레코드 만 검색하고 사용자에게 다음 뒤로 버튼을 제공합니다. 페이징의 종류.

2) ListBox에서 virtualization 옵션을 사용하면 UI가 반응적이고 효율적일 수 있습니다. 특정 시점에 표시 될 수있는 Person 컬렉션에서 목록 상자로 해당 객체 만로드되도록합니다.

관련 문제