2016-06-24 25 views
0

Ich muss meine DataGrid-Spalte bearbeitbar machen, kann aber nicht herausfinden, wie dies zu machen. Wenn ich versuche, Spalte zu bearbeiten, erhalte ich eine Ausnahme "EditItem ist für diese Ansicht nicht erlaubt".Machen WPF DataGrid Spalte editierbar

Meine XAML:

<DataGrid IsReadOnly="False" AutoGenerateColumns="False" Margin="6,6,5,18" Name="dataGrid1" ItemsSource="{Binding MyDictionary}" CellEditEnding="dataGrid1_editCells"> 
     <DataGrid.Columns> 
      <DataGridTextColumn IsReadOnly="True" Header="Name" Binding="{Binding Key}" /> 
      <DataGridTextColumn IsReadOnly="False" Header="Value" Binding="{Binding Value}" /> 
     </DataGrid.Columns> 
    </DataGrid> 

Und CS-:

public partial class MyView : Window 
{ 
    private Dictionary<string, string> myDictionary = new Dictionary<string, string>(); 

    public Dictionary<string, string> Dictionary { get { return myDictionary ; } set { myDictionary = value; } } 

    public MyView() 
    { 
     // Here is some code that fills dictionary 

     InitializeComponent(); 
     this.DataContext = this; 
    } 
} 

Was ist das Problem? Wie kann ich meine zweite Spalte editierbar machen?

+0

warum nicht eine observablecollection verwenden? – riteshmeher

Antwort

1

Wenn Sie an ein Wörterbuch binden, zählt es den Inhalt als KeyValuePair Instanzen, die eine Struktur ist. Sie können die Mitglieder einer Struktur nicht bearbeiten, die dieselbe Instanz behalten (und die Eigenschaften sind in diesem Fall "get-only").

An eine Liste von Klasseninstanzen binden.

+0

tatsächlich können Sie ein Mitglied einer Struktur ändern, aber es wird nicht empfohlen – wiero

+0

@wiero: Wenn Sie auf eine Struktur zugreifen, erhalten Sie eine Kopie davon, wenn Sie also diese Struktur bearbeiten, haben Sie nicht die Instanz geändert, die Sie wahrscheinlich "gemeint" haben bearbeiten. Sie müssten diese Instanz der Position zuordnen, an die sie entnommen wurde, was jedoch nicht möglich ist. –

+0

danke, jetzt verstehe ich, was du meintest – wiero

0

DataGrid arbeitet mit Sammlungen und Dictianoerry ist eine Sammlung von KeyValuePair. Wenn Sie diese Struktur betrachten, sehen Sie, dass sie nicht veränderbar ist.