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 に答える