C# WPF Edytowalne komórki w DataGrid poprzez dwuklik

0

Witam,
Gdy klikam 2x na komórkę z jakąś daną w datagrid wyskakuje mi komunikat „Element „EditItem” jest niedozwolony dla tego widoku.”.

XAML:

<Window x:Class="WpfApp1.MainWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
       xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
       xmlns:local="clr-namespace:WpfApp1"
       mc:Ignorable="d"
       Title="MainWindow" Height="450" Width="800">
   <Grid x:Name="MainGrid" x:FieldModifier="public">
   </Grid>
</Window>

C#:

    public class DataItem
        {
            public string Column1 { get; set; }
            public string Column2 { get; set; }
            public string Column3 { get; set; }
            public string Column4 { get; set; }
        }
        public MainWindow()
        {
            InitializeComponent();
            Foo();
        }

        private void Foo()
        {
            var dg = new DataGrid();
            this.MainGrid.Children.Add(dg);

            for (int i = 1; i <= 4; ++i)
            {
                var column = new DataGridTextColumn();
                column.Header = "Column" + i;
                column.Binding = new Binding("Column" + i);
                column.IsReadOnly = false;
                dg.Columns.Add(column);
            }

            dg.Items.Add(new DataItem { Column1 = "a.1", Column2 = "a.2", Column3 = "a.3", Column4 = "a.4" });
            dg.Items.Add(new DataItem { Column1 = "b.1", Column2 = "b.2", Column3 = "b.3", Column4 = "b.4" });
        }
1

Domyślne kontrolki w wpf'ie mają 2 tryby pracy. Pierwszy na podanych na sztywno wartościach np. w xaml a drugi na działający na kolekcjach. Pierwszy tryb wykorzystuje property items drugi ItemsSource. Zeby działało musisz uzyć tego drugiego, i wstawić do nie go Liste(która zostanie owrapowana) lub jakaś kolekcje która implementuje wpf'owe interfejsy. Pola Items w takiej sytuacji nie wolno dotykać.

Żeby zmiana ilosci w kolekcji powodowała update powinieneś użyć cos typu observablecollection.

0

Zrobiłem jak napisałeś, stworzyłem listę public ObservableCollection<MyClass> Collection = new ObservableCollection<MyClass>(); i przypisałem ją do ItemsSource i faktycznie mogę edytować pole jednak zmiany nie zostają na ekranie tylko znikają.

0

U mnie działa :), sprawdz logi w output i czy nie masz zadnych dziwnych błądow, typu masz 2 listy itp. Ew. pokaż kod :)

0

Faktycznie coś się krzaczyło z innym kodem, wszystko działa dziękuję za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1