2

可能是我错过了一些东西,但我已经用这个打败了我的头。

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

那里。

我做错了什么?

4

2 回答 2

3

尝试将以下内容添加到您的 ListBox xaml。

IsSynchronizedWithCurrentItem="false"
于 2013-03-27T02:27:25.433 回答
1

当您将源分配给 ListBox 时,会创建 packagesViewSource CollectionViewSource 的 DefaultView。并且它选择了第一个元素。因此,在分配源时,请分 3 步进行:

  1. 为您的资源获取 DefaultView,然后
  2. MoveCurrentToPosition(-1) 在这个视图上,然后
  3. 将具有正确当前位置的视图分配给 ListBox。
于 2011-12-14T17:04:59.597 回答