CollectionViewSource初始化会引发listbox's SelectionChanged
本文关键字:SelectionChanged listbox 初始化 CollectionViewSource | 更新日期: 2023-09-27 18:18:03
也许我错过了什么,但我已经用这个敲了我的头。
我定义了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();
...
}
和
packagesViewSource.Source = queryPackages.ToList();
涉及事件
private void lstbPackages_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
...
}
和
lstbPackages.SelectedItem != null
。
我做错了什么?
尝试将以下内容添加到您的ListBox xaml.
IsSynchronizedWithCurrentItem="false"
当你给ListBox分配一个源时,你的packagesViewSource CollectionViewSource的DefaultView被创建。它选择了第一个元素。因此,在分配来源时,请分3步完成:
- 获取资源的DefaultView,然后
- movecurrenttposition(-1)在这个视图上,然后
- 将当前位置正确的视图分配给ListBox。