怪奇現象に遭遇。Web 検索をたくさん行った場合、解決策が得られません。私はWPF、VS2010エンジンを使用しています。GUI は、主に 4 つの ListBox で構成されています。
最初の ListBox はマートの支店の集合であり、2 番目の ListBox はマートが販売する果物、肉、野菜などの商品の集合です。3つ目のListBoxはマートグッズの一種です。(リンゴ、桃、ピア、メロン...) 4 番目の ListBox は、選択された果物の種類の集合です。たとえば、リンゴを選択すると、コートランド、クラブアップル、サンサ、ガラなどです。
プログラムを起動すると、1番目のリストボックスにオールマートの店舗が表示され、1つの店舗を選択すると、2番目のリストボックスにマートで販売されている商品リストが表示されます。
同様に、3 番目の ListBox と 4 番目の ListBox には、選択された項目のサブ種類が表示されます。
1 番目、2 番目、4 番目の ListBox は正常ですが、3 番目の ListBox にエラーがあります。2番目と3番目は同じ構造だと思います。
3 番目の ListBox は、選択された項目の変更を更新できません。SelectionMode (Single、Multiple、Extend) に関係なく、3 番目の ListBox の SelectedItems には、選択したすべての項目があります。さらに、3 番目の ListBox.SelectedItems には重複したアイテムが含まれています。
しかし、SelectionChanged イベントの発火は良いことです。SelectedItems または SelectedItem のみが問題です。
現在、この関数を作成するには、迂回方法を使用しています。SelectionChanged を起動した後、SelectionChangedEventArgs の AddedItems をキャッチします。したがって、SelectedItem の代わりに、SelectionMode = "Single" のように AddedItems を使用します。
多くの提案、VirtualizingStackPanel.IsVirtualizing="False"、IsSynchronizedWithCurrentItem="True" を試しましたが、解決策が見つかりません。申し訳ありませんが、すべてのビハインド コードと ~ xaml を提供することはできません。実際、このアプリケーションは非常に大きいです。だから、私はそれをすることはできません。
そして、申し訳ありませんが、私の英語力は貧弱です。
支店
<StackPanel Orientation="Vertical" Grid.Column="0">
<Label HorizontalAlignment="Center">Goods</Label>
<ListBox Name="lbLoadedGoods" Height="120" Margin="2" SelectionMode="Single" SelectionChanged="lbLoadedGoods_SelectionChanged"></ListBox>
</StackPanel>
<StackPanel Orientation="Vertical" Grid.Column="1" >
<Label HorizontalAlignment="Center">ITEM</Label>
<!-- ListBox Double Click Event Setter -->
<ListBox Name="lbLoadedItems" Height="120" Margin="2" SelectionMode="Single" SelectionChanged="lbLoadedItems_SelectionChanged">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem }}">
<EventSetter Event="MouseDoubleClick" Handler="lbLoadedItems_MouseDoubleClick"></EventSetter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</StackPanel>
</Grid>
</GroupBox>
<Label Grid.Column="0" Grid.Row="0" HorizontalAlignment="Center">SubItem</Label>
<ListBox Name="lbSelectedSubItemData" Height="80" Grid.Column="0" Grid.Row="1" Margin="4">
<!-- ListBox Double Click Event Setter -->
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<EventSetter Event="MouseDoubleClick" Handler="lbSelectedSubItemData_MouseDoubleClick"></EventSetter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
</StackPanel>
// public ObservableCollection<string> BranchList { get; private set; }
// public ObservableCollection<Goods> GoodList { get; private set; }
// public ObservableCollection<Items> ItemList { get; private set; }
// private ObservableCollection<string> m_usbitemlist = new ObservableCollection<string>();
// public ObservableCollection<string> SubItemList { get { return m_usbitemlist; } private set { m_usbitemlist = value; } }
private void BindFabFileList()
{
lbBranches.ItemsSource = BranchList;
lbLoadedGoods.ItemsSource = GoodList;
lbLoadedItems.ItemsSource = ItemList;
}
private void lbLoadedGoods_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ItemList = new ObservableCollection<Items>();
// ItemList Add. From Selected Goods
}