2011-12-14 3 views
0

내가 놓친 것이 있을지 모르지만 나는 이미 이걸 가지고 머리를 쳤습니다.CollectionViewSource 초기화는 목록 상자의 SelectionChanged를 발생시킵니다.

내가 정의한 CollectionViewSource :

<CollectionViewSource x:Key="packagesViewSource" d:DesignSource="{d:DesignInstance my:Package, CreateList=True}" /> 

및 목록 상자 : 또한

<ListBox Name="lstbPackages" 
    SelectionChanged="lstbPackages_SelectionChanged" 
    ItemsSource="{Binding Source={StaticResource packagesViewSource}}" 
    DisplayMemberPath="Name" 
    SelectedValue="{Binding Path=PackageId, UpdateSourceTrigger=Explicit}" 
    SelectedItem="{Binding Path=Package}" 
    SelectedValuePath="IdPackage" 
/> 

, 내가 가진 코드 숨김 packagesViewSource 초기화 :

private IQueryable<Packages> GetPackagesQuery() 
{ 
    IQueryable<Package> query = dc.PackagesList; 
    // Returns an ObjectQuery. 
    return query; 
} 

private void UserControl_Loaded(object sender, RoutedEventArgs e) 
{ 
    ... 
    packagesViewSource =((System.Windows.Data.CollectionViewSource)(this.FindResource("packagesViewSource"))); 
    queryPackages = this.GetPackagesQuery(); 
    packagesViewSource.Source = queryPackages.ToList(); 
    ... 
} 

그리고 라인

당신이 거기

lstbPackages.SelectedItem != null 

를 추측 할 수로

packagesViewSource.Source = queryPackages.ToList(); 

이벤트를

private void lstbPackages_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ... 
} 

을 포함합니다.

내가 뭘 잘못 했니?

+1

는 당신이 요구하는지 모르겠지만, 당신은'ListBox' 어떤 항목이 선택하지 않는로 초기화하고, 당신은 당신의 정의에서'SelectedItem'를 설정하는, 그래서'ListBox'가 초기화 할 때입니다 'SelectedItem'을 설정하기 위해'SelectionChanged' 이벤트를 실행하십시오 – Rachel

답변

1

소스를 ListBox에 할당하면 packagesViewSource CollectionViewSource의 DefaultView가 만들어집니다. 첫 번째 요소가 선택되어 있습니다. 소스를 할당 할 때, 3 단계에서 작업을 수행합니다

  1. 다음, 리소스에 대한 다음이보기에
  2. MoveCurrentToPosition (-1),
  3. 목록 상자에 정확한 현재 위치와보기를 할당을 기본보기를 가져옵니다 .
+0

처음 두 점은이 코드 행과 비슷합니다 : ICollectionView view = CollectionViewSource.GetDefaultView (queryPackages.ToList()); view.MoveCurrentToPosition (-1); 그리고 마지막 하나를 적용하는 방법? – saqwer

+0

글쎄, 먼저 두통을 피하기 위해 몇 줄의 일을 더 잘하는 편이 좋다 :-) 그런 다음 packagesViewSource.Source = ..., no magic :-) – GameAlchemist

+0

사실, nope.
lstbPackages.ItemsSource = view;를 사용했습니다.
하지만 아이디어에 대해 많이 고맙습니다. 나는 빚을지고있다.)
p.s .: 오, 이런! 줄 분리에 사용할 태그를 모르겠습니다. – saqwer

3

다음을 ListBox xaml에 추가해보십시오.

IsSynchronizedWithCurrentItem="false"