第一个ListBox是Mart Branches的聚合,第二个ListBox是商品的集合,如水果,肉类,蔬菜等等,一个Mart销售。 第三个ListBox是一种Mart商品。 (apple,peach,peer,melon ...)第4个ListBox是一种选定水果的聚合,例如,如果选择Apple,cortland,crabapple,sansa,gala等。
在启动程序时,All Mart Branch显示在第一个ListBox上,如果我选择一个分支,则在Mart出售的商品列表显示在2; nd列表框中。
同样,所选项目的子类型显示在第3个ListBox和第4个ListBox上。
第1个,第2个,第4个ListBox表现不错,但是第3个ListBox有错误。我认为2'和3'具有相同的结构。3'rd ListBox无法更新selecteditem更改。无论SelectionMode(Single,Multiple,Extend)如何,3'rd ListBox的SelectedItems都拥有所有项目 我选择了。此外,第3个ListBox.SelectedItems包含重复的项目。
但是,SelectionChanged事件触发很好。只有,SelectedItems或SelectedItem才有问题。
目前,为了制作这个功能,我采用绕行方式。在激活SelectionChanged后,我捕获了SelelctionChangedEventArgs的AddedItems。 因此,我使用AddedItems而不是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
}
答案 0 :(得分:0)
您将对象ItemList的引用设置为新实例,而不是更新WPF已连接到的列表中的项目。 WPF自动挂接到ObservableCollection的CollectionChanged事件,但它不知道您已经更改了后面代码中的引用。 UI仍然连接到内存中的旧对象。
而不是:
ItemList = new ObservableCollection<Items>();
ItemList.Add(...);
这样做:
ItemList.Clear();
ItemList.Add(...);