2013-06-18 13 views
6

Mam problemy z WPF DataGrid zmiany kolejności wierszy, gdy nie chcę tego.DataGrid przestawia niechcianych

Kroki:

  1. Zastosuj grupowanie
  2. posortować DataGrid przez kolumnę z duplikatami w grupie
  3. Zmień komórka nie sortowanej kolumny
  4. Zauważ, że wiersze zmienić kolejność ruchu edytowany wiersz na końcu zestawu wierszy z pasującymi wartościami w posortowanej kolumnie

Przykład (Uwaga sortując LastName)

FirstName | LastName^| Amount 
----------+------------+--------- 
Group:Flinstone 
Fred  | Flinstone | 42 
Wilma  | Flinstone | 22 
Pebbles | Flinstone | 28 
Dino  | Flinstone | 64 

Zmiana ilości Wilma jest od 22 do 18 spowoduje DataGrid przestawienie w następujący sposób:

FirstName | LastName^| Amount 
----------+------------+--------- 
Group:Flinstone 
Fred  | Flinstone | 42 
Pebbles | Flinstone | 28 
Dino  | Flinstone | 64 
Wilma  | Flinstone | 18 

Jak zatrzymać DataGrid z przestawiania rzędy lubię to?

Uwaga: Niepożądane zmienianie kolejności nie ma miejsca, jeśli do DataGrid nie zostanie zastosowane żadne grupowanie.

Oto kod używam:

ViewModel:

public class MainViewModel 
{ 
    public ObservableCollection<Item> Items { get; set; } 
    public ListCollectionView ItemsView { get; set; } 

    public MainViewModel() 
    { 
     Items = new ObservableCollection<Item>(); 
     Items.Add(new Item("Fred", "Flinstone", 42)); 
     Items.Add(new Item("Wilma", "Flinstone", 22)); 
     Items.Add(new Item("Pebbles", "Flinstone", 52)); 
     Items.Add(new Item("Dino", "Flinstone", 52)); 
     Items.Add(new Item("Barney", "Rubble", 32)); 
     Items.Add(new Item("Betty", "Rubble", 62)); 
     Items.Add(new Item("BamBam", "Rubble", 42)); 
     Items.Add(new Item("George", "Jetson", 22)); 
     Items.Add(new Item("Jane", "Jetson", 52)); 
     Items.Add(new Item("Judy", "Jetson", 32)); 
     Items.Add(new Item("Elroy", "Jetson", 62)); 
     Items.Add(new Item("Astro", "Jetson", 42)); 

     ItemsView = new ListCollectionView(Items); 
     ItemsView.GroupDescriptions.Add(new PropertyGroupDescription("LastName")); 
    } 
} 

Widok:

<DataGrid 
    ItemsSource="{Binding ItemsView}"> 
    <DataGrid.GroupStyle> 
     <GroupStyle> 
      <GroupStyle.ContainerStyle> 
       <Style TargetType="{x:Type GroupItem}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type GroupItem}"> 
           <StackPanel> 
            <TextBlock Text="{Binding Path=Name}" /> 
            <ItemsPresenter /> 
           </StackPanel> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </GroupStyle.ContainerStyle> 
     </GroupStyle> 
    </DataGrid.GroupStyle> 
</DataGrid> 

Model:

public class Item 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public decimal Amount { get; set; } 

    public Item(string firstName, string lastName, decimal amount) 
    { 
     FirstName = firstName; 
     LastName = lastName; 
     Amount = amount; 
    } 
} 
+0

można wyświetlić kod gdzie dokonać zmiany (od kwoty Wilma w dniach od 22 do 18 lat)? – DrDev

+0

@DrDev Zmieniam kwotę Wilmy za pośrednictwem interfejsu użytkownika, a nie kodu. –

Odpowiedz

0

To nie jest najładniejszy rozwiązanie, ale w przeszłości ominąłem t jego problem przez sortowanie danych w moim źródle danych, a nie w DataGridView. Nauczyłem się, jak to zrobić z this forum. (Zawsze zakładam użyteczne wskazówki dotyczące kodowania)

Mam nadzieję, że tego właśnie szukałeś!

EDYCJA: Drugi do ostatniego postu na dole to ten, który faktycznie działa.

+0

Czy możesz podsumować rozwiązanie znalezione w linku? Linki są bardzo pomocne przy poszukiwaniu dodatkowych informacji, ale [same w sobie nie są to dobre odpowiedzi] (http://meta.stackexchange.com/q/8231/189763). –

+0

Wystarczająco fair. Będę edytować moją odpowiedź, kiedy wyjdę z pracy. –

0

Można zastąpić domyślne zachowanie sortowania określonych kolumn (nawet gdy klikane są nagłówki kolumn) przy użyciu załączonych właściwości, które powinny rozwiązać problem. W tym rozwiązaniu kliknięcie nagłówka zastosuje niestandardową kolejność sortowania, która powinna pozostać "aktywna" niezależnie od zmian w danych podstawowych.

https://stackoverflow.com/a/18218963/2115261