我遇到了奇怪的现象。如果我做了很多网络搜索,我无法得到解决方案。我使用 WPF,VS2010 引擎。GUI 主要由四个 ListBox 组成。
第一个 ListBox 是 Mart 分店的集合,第二个 ListBox 是一个 Mart 销售的水果、肉类、蔬菜等商品的集合。第三个 ListBox 是一种 Mart 商品。(apple, peach, peer, melon...) 第 4 个 ListBox 是一种选定水果的聚合,例如,如果选择 Apple,则为 cortland、crabapple、sansa、gala 等。
启动程序时,All Mart Branch 显示在第一个 ListBox 上,如果我选择一个分支,则在 Mart 销售的商品列表显示在第二个列表框上。
同理,在第 3 个 ListBox 和第 4 个 ListBox 上显示所选项目的子类。
1'st, 2'nd, 4'th ListBox 很好,但 3'rd ListBox 有错误。我认为 2'nd 和 3'rd 具有相同的结构。
第三个列表框无法更新选定项更改。无论 SelectionMode(Single、Multiple、Extend)如何,第 3 个 ListBox 的 SelectedItems 都有我选择的所有项目。此外,第三个 ListBox.SelectedItems 包含重复项。
但是,SelectionChanged 事件触发很好。只有 SelectedItems 或 SelectedItem 有问题。
目前,为了实现这个功能,我使用了绕道的方式。触发 SelectionChanged 后,我捕获了 SelctionChangedEventArgs 的 AdditionalItems。因此,我使用 AdditionalItems 而不是 SelectdItem,例如 SelectionMode = "Single"
我尝试了很多建议,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
}