2013-06-18 2 views
6

WPF DataGrid私が気にしたくないときに行を並べ替えることに問題があります。不要な並べ替えを行うDataGrid

ステップ:

  1. 行が編集移動リオーダことを確認ソート列のセルではないグループ
  2. 変更内重複してカラムにより
  3. ソートDataGridグルーピング適用列は、ソートされた列に一致する値を持つ行セットの一番下にあります。

例(姓によってソートに注意してください):

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

が22から18にウィルマの量を変更する、次のように再配置するデータグリッドになります:

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

は、私は、行を並べ替えるからDataGridをどのように停止しますこのような?

注:DataGridにグループ化が適用されていない場合、不要な並べ替えは行われません。

の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")); 
    } 
} 

ビュー:

<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> 

モデル:

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

あなたは(22から18までウィルマの量の)変更を行うコードを表示することができますか? – DrDev

+0

@DrDevウィルマの金額は、コードではなくUIを通じて変更されます。 –

答えて

0

をそれは素敵な解決策ではないのですが、ここで

は、私が使用していたコードです過去に私は逃げたDataGridViewではなく、自分のデータソース内のデータを並べ替えることで問題を解決しました。私はthis forumからこれを行う方法を学びました。 (私はいつも便利なコーディングのヒントをブックマークします)

私はこれがあなたが探していたことを望みます!

EDIT:下から2番目の最後のポストは、実際に動作するものです。

+0

リンクにある解決策を要約できますか?リンクは、追加の情報を探す際に非常に役立ちますが、それ自体では良い答えではありません(http://meta.stackexchange.com/q/8231/189763)。 –

+0

十分に公正。私は仕事から降りるときに私の答えを編集します。 –

0

添付のプロパティを使用して特定の列の既定の並べ替え動作(列ヘッダーがクリックされている場合でも)をオーバーライドできます。このソリューションでは、ヘッダをクリックするとカスタムのソート順が適用されます。これは、基礎となるデータの変更に関係なく「アクティブ」のままでなければなりません。

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

関連する問題