wpf datagrid invalidoperationexception

wpf - DataGrid ''EditItem'' no está permitido para esta vista al arrastrar varios elementos



invalidoperationexception (4)

Obtuve este problema al asignar ItemsSource a IEnumerable <T>.

Lo arreglé convirtiendo IEnumberable <T> en una Lista <T> y luego asignándolo a ItemsSource.

No estoy seguro de por qué usar IEnumerable causó ese problema, pero este cambio lo solucionó.

Tengo una red de datos que obtiene datos como este:

public struct MyData { public string name { set; get; } public string artist { set; get; } public string location { set; get; } } DataGridTextColumn col1 = new DataGridTextColumn(); col4.Binding = new Binding("name"); dataGrid1.Columns.Add(col1); dataGrid1.Items.Add((new MyData() { name = "Song1", artist = "MyName", location = "loc"})); dataGrid1.Items.Add((new MyData() { name = "Song2", artist = "MyName", location = "loc2"}));

El problema es que cada vez que un usuario intenta editar una celda o arrastra varias celdas, la aplicación lanza una excepción:

System.InvalidOperationException no fue manejado
Mensaje: ''EditItem'' no está permitido para esta vista.

¿Por qué es esto? ¿Es por la forma en que se ingresan los datos?
¿Algunas ideas?
¡Gracias!


Esta respuesta no es mía, solo el ejemplo de código de trabajo sugerido por AnthonyWJones.

public class MyData //Use class instead of struct { public string name { set; get; } public string artist { set; get; } public string location { set; get; } } DataGridTextColumn col1 = new DataGridTextColumn(); col4.Binding = new Binding("name"); dataGrid1.Columns.Add(col1); dataGrid1.Items.Add((new MyData() { name = "Song1", artist = "MyName", location = "loc"})); dataGrid1.Items.Add((new MyData() { name = "Song2", artist = "MyName", location = "loc2"})); //Create a list of MyData instances List<MyData> myDataItems = new List<MyData>(); myDataItems.Add(new MyData() { name = "Song1", artist = "MyName", location = "loc"}); myDataItems.Add(new MyData() { name = "Song2", artist = "MyName", location = "loc2"}); //Assign the list to the datagrid''s ItemsSource dataGrid1.ItemsSource = items;


En lugar de usar una struct usa una class lugar.

RESPUESTA ACTUALIZADA: Intente agregar sus instancias MyData a una lista y luego asigne esa lista a DataGrid.ItemsSource


Si utiliza datagrid DataGridCheckBoxColumn, debe establecer <Setter Property="IsEditing" Value="true" /> en la casilla de verificación de la columna. Ver esto: https://.com/a/12244451/1643201