可能是我错过了一些东西,但是我已经为此打了头。

我定义了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/

10-11 04:44