gpt4 book ai didi

c# - WPF : ListBox SelectedItems not updating or being accumulated when selection changed

转载 作者:行者123 更新时间:2023-11-30 18:32:36 24 4
gpt4 key购买 nike

我遇到了奇怪的现象。如果我做了很多网络搜索,我无法得到解决方案。我使用WPF、VS2010引擎。 GUI 主要由四个列表框组成。

第一个 ListBox 是 Mart Branches 的聚合,第二个 ListBox 是 Mart 销售的水果、肉类、蔬菜等商品的聚合。 第三个ListBox是一种Mart商品。 (apple, peach, peer, melon...) 4th ListBox是一种选中的水果的聚合,比如选中Apple,cortland, crabapple, sansa, gala等等。

启动程序时,All Mart Branch 显示在第 1 个列表框中,如果我选择一个分店,则在第 2 个列表框中显示在 Mart 销售的商品列表。

同理,第3个ListBox和第4个ListBox显示选中项的子类。

第 1、2、4 个 ListBox 表现良好,但第 3 个 ListBox 有错误。我认为 2'nd 和 3'rd 具有相同的结构。

第三个列表框无法更新所选项目的更改。无论 SelectionMode(单一、多重、扩展)如何,第 3 个 ListBox 的 SelectedItems 都有所有项目我已经选择了。此外,第 3 个 ListBox.SelectedItems 包含重复项。

但是,SelectionChanged 事件触发很好。只有 SelectedItems 或 SelectedItem 有问题。

目前,为了实现此功能,我使用绕行方式。在触发 SelectionChanged 之后,我捕获了 SelelctionChangedEventArgs 的 AddedItems。所以,我使用 AddedItems 而不是像 SelectionMode = "Single"这样的 SelectdItem

我尝试了很多建议,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
}

最佳答案

您正在将对对象 ItemList 的引用设置为一个新实例,而不是更新 WPF 已经连接到的列表中的项目。 WPF 自动连接到 ObservableCollection 的 CollectionChanged 事件,但它不知道您已经在后面的代码中更改了引用。 UI 仍然连接到内存中的旧对象。

代替:

ItemList = new ObservableCollection<Items>();
ItemList.Add(...);

这样做:

ItemList.Clear();
ItemList.Add(...);

关于c# - WPF : ListBox SelectedItems not updating or being accumulated when selection changed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18478691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com