Инициализация CollectionViewSource поднимает SelectionChanged списка. - PullRequest
1 голос
/ 14 декабря 2011

Может быть, я что-то упустил, но уже ударил себя этим.

Я определил CollectionViewSource:

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

и ListBox:

<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"
/> 

Кроме того, у меня есть инициализация пакетов codeViewSource:

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();
   ...
}

И линия

packagesViewSource.Source = queryPackages.ToList();

включает в себя событие

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

и как вы могли догадаться

lstbPackages.SelectedItem != null

есть.

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 27 марта 2013

Попробуйте добавить следующее в свой ListBox xaml.

IsSynchronizedWithCurrentItem="false"
1 голос
/ 14 декабря 2011

когда вы назначаете источник для вашего ListBox, создается DefaultView вашего пакета ViewSource CollectionViewSource. и это первый выбранный элемент. Поэтому при назначении источника сделайте это в 3 шага:

  1. Получите DefaultView для вашего ресурса, затем
  2. MoveCurrentToPosition (-1) в этом представлении, затем
  3. назначить просмотр с правильной текущей позицией ListBox.
...