2017-02-20 100 views
0

我正在尋找一個方式在一個ListView選擇幾個項目,我解釋我的問題,因爲也許還有一個更簡單的方法來做到這一點:WPF列表視圖設置幾個選定的項目

private void symetrieX_Click(object sender, RoutedEventArgs e) 
{ 
    if (this.ListView4.SelectedItems.Count > 0) 
    { 
     if (this.ListView3.SelectedItems.Count == 1) 
     { 
      Meb meb = (Meb)ListView3.SelectedItem; 
      CollectionViewSource itemCollectionViewSource4; 
      itemCollectionViewSource4 = (CollectionViewSource)MainGrid2.FindResource("ItemCollectionViewSource4"); 
      foreach (Repere repere in meb.liste_reperes) 
      { 
       for (int i = 0; i < ListView4.SelectedItems.Count; i++) 
       { 
        if (repere.Position == ((Repere)ListView4.SelectedItems[i]).Position) 
        { 
         repere.SymX = !repere.SymX; 
        } 
       } 
      } 
      Profil profil = new Profil(meb.Profil); 
      double[] echelle = calcul_echelle(meb.Longueur, profil); 
      meb = recalcul_pieces(meb); 
      monDessin.Children.Clear(); 
      Draw_barre(meb.Longueur, profil, echelle, meb.CNC); 
      Draw_pieces(meb, echelle); 
      itemCollectionViewSource4.Source = new ObservableCollection<Repere>(); 
      itemCollectionViewSource4.Source = meb.liste_reperes; 


     } 
    } 
} 

在該代碼中我讀我的ListView「ListView4」中的所有選定項目,並將它們轉換爲「Repere」列表,然後我將所有選定項目應用symetry,然後將修改後的列表發送回我的ListView Source,以更新ListView。 問題是,當我這樣做:

itemCollectionViewSource4.Source = new ObservableCollection<Repere>(); 
itemCollectionViewSource4.Source = meb.liste_reperes; 

選定的項目未被選擇...

我想只是保存在臨時列表中選擇的項目,我想在年底做類似的東西:

foreach (ListViewItem item in Listview4) 
{ 
    foreach (Repere rep in temporary_list) 
    { 
     item.Selected = rep==(Repere)item; 
    } 
} 

我嘗試了很多方法,但找不到正確的方法來做到這一點。

最後,我想知道如果我做得正確,也許有一種方法來修改我的ListView,沒有做所有的東西,所以沒有「重置」源?

在此先感謝您的幫助

編輯:我發現了一個解決方案來「解決」,但正如我所說,我不知道這是最好的方法:

在開始的時候我救列表中的所有選定項目。 然後我讓新觀察集合後,我做到以下幾點:

itemCollectionViewSource4.Source = new ObservableCollection<Repere>(); 


itemCollectionViewSource4.Source = meb.liste_reperes; 
foreach(Repere rep in liste_temp) 
{ 
    ListView4.SelectedItems.Add(rep); 
} 

但我覺得我做很多的「爲」只用於更新一個值。這在時間上並不成問題,因爲我會在名單上列出最多10-20個項目,但我覺得它不是很「乾淨」的方式。

回答

0

所以,我終於發現了一個有趣的網站在這裏: http://drwpf.com/blog/2008/10/20/itemscontrol-e-is-for-editable-collection/

剛把通過

(ListView4.ItemsSource as ListCollectionView).Refresh(); 

更換

itemCollectionViewSource4.Source = new ObservableCollection<Repere>(); 
itemCollectionViewSource4.Source = meb.liste_reperes; 

在年底源更新,我一直選擇actived對修改後的項目。

相關問題