可能是我错过了一些东西,但是我已经为此打了头。
我定义了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"
/>
另外,我在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时,将创建packagesViewSource CollectionViewSource的DefaultView。并且已选择第一个元素。因此,在分配源时,请分3步进行操作:
获取您资源的DefaultView,然后
在该视图上移动CurrentToPosition(-1),然后
将具有正确当前位置的视图分配给ListBox。
关于c# - CollectionViewSource初始化引发列表框的SelectionChanged,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8507251/