我遇到了奇怪的現象。如果我做了很多網絡搜索,我無法獲得解決方案。 我使用WPF,VS2010引擎。 GUI主要由四個ListBox組成。WPF:ListBox SelectedItems沒有更新或選擇變化時正在積累
第一個列表框是Mart分支的集合,第二個列表框是商品的集合,例如水果,肉類,蔬菜等等,這是Mart賣的。 第三個ListBox是一種Mart商品。 (蘋果,桃子,同行,瓜...)第4列表框是一種選定的水果的聚合,例如,如果蘋果被選中,cortland,crabapple,sansa,gala等。
在啓動程序時,所有超市分店都顯示在第1個列表框中,如果我選擇一個分店,則在超市中出售的商品列表顯示在第2和第n列表框中。
以同樣的方式,在第3個列表框和第4個列表框中顯示所選項目的子類別。
1'st,2'nd,4'th ListBox do good,但3'rd ListBox有錯誤。我認爲2'nd和3'rd具有相同的結構。
3'rd ListBox無法更新selecteditem更改。無論SelectionMode(Single,Multiple,Extend)如何,3'rd ListBox的SelectedItem都包含我選擇的所有項目 。此外,3'rd ListBox.SelectedItems包含重複的項目。
但是,SelectionChanged事件觸發是好的。只有SelectedItems或SelectedItem是問題。
目前,爲了使這個功能,我使用繞道的方式。在發生SelectionChanged事件後,我捕獲了SelelctionChangedEventArgs的AddedItems。 所以,我用AddedItems,而不是像SelectdItem =的SelectionMode「單」
我試了很多建議,VirtualizingStackPanel.IsVirtualizing =「假」,IsSynchronizedWithCurrentItem =「真」,但我不能找到解決辦法。 對不起,我無法提供所有後臺代碼和〜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
}
我覺得你的問題是你的數據不會得到更新..和也你設置你的列表框的一些列表的ItemsSource ..所以你的解決方案可能是..當你改變選定的項目或選定的項目時再次設置itemsSource ..並使您的列表observablecollections..it幫助你我認爲...對於任何查詢更新下面.. – loop
如果我正確理解你,這是主要細節Sceranio閱讀關於IsSynchronizedWithCurrentItem =「True」 – makc
我的ListBox ItemsSource是ObservableCollection如你所見。 「ItemList」是ObservableCollection。所有的操作都很好。只是「lbLoadedItems.SelectedItems」沒有更新。我選擇的所有項目都是在「lbLoadedItems」中累積的,我會更多地考慮您的建議。感謝您的關注。 – chaji99