• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

DataGrid - bindowanie wierszy do listy WPF / MVVM

Object Storage Arubacloud
0 głosów
967 wizyt
pytanie zadane 11 marca 2017 w C# przez PejtaM Użytkownik (550 p.)
edycja 12 marca 2017 przez PejtaM

Witam, nie potrafię zbindować całego wiersza z DataGrid do Listy.

Przykładowo mam klasę Person:

public class Person 
{
     private string name;
     private string surename;
     private bool isChecked;

     public Person(string name, string surename) 
     { 
         this.name = name; 
         this.surename = surename; 
         this.isChecked = false; 
     }

     public Person(string name, string surename, bool isChecked)
     {
         this.name = name;
         this.surename = surename;
         this.isChecked = isChecked;
     }
}

I powiedzmy, że zrobiłem listę z obiektów klasy person - przykładowo 10 obiektów

List<Person> personsList = new List<Person>();
personsList.Add(new Person(jan, kowalski)); 
... x10

I w xaml mam stworzony DataGrid z kolumnami:

<DataGrid ItemsSource="{Binding Path=personsList}">
      <DataGrid.Columns>
           <DataGridTextColumn Header="Name" Binding="{Binding name}"/>
            <DataGridTextColumn Header="Surename" Binding="{Binding surename}" />
            <DataGridCheckBoxColumn Header="IsChecked" Binding="{Binding isChecked}"  />
       </DataGrid.Columns>
</DataGrid>

=> w UI wybieram kilka CheckBoxów i chcę aby po naciśnięciu Buttona zbindowało mi to do listy w postaci

new Person(name,surename,isChecked(pobrane z UI));
... x10

Czyli jak otrzymać listę z złożoną z każdego wiersza DataGrid ?

 

1 odpowiedź

+1 głos
odpowiedź 12 marca 2017 przez Bartłomiej Łaski Mądrala (5,100 p.)
wybrane 12 marca 2017 przez PejtaM
 
Najlepsza

Witaj

Wedlug internetu i stack overflow, twoj problem polega na nie ustawieniu {get; set;} przy name, surname, isChecked :).
http://stackoverflow.com/questions/18068413/bind-list-to-datagrid


Konstruktor moglby byc jeden, i wygladalbym on tak.

public Person(string name, string surename, isChecked = false) 
{ 
    this.name = name; 
    this.surename = surename; 
    this.isChecked = isChecked; // domyslna wartosc zawsze bedzie na false, chyba ze ktos poda inna wartosc jako trzeci parametr :)
}

 

PS. Prosze Cię rób sobie wciecia w kodzie bo twoj kod wyglada jak kupa... Estetyka kodu = lepszy debugging kodu...

1
komentarz 12 marca 2017 przez PejtaM Użytkownik (550 p.)

Dzięki za pomoc i podesłanie linka :) W kodzie miałem ustawione Właściwości a i tak nie działało. Spędziłem nad tym sporo czasu.

Przyczyna leżała w tym, że próbowałem zbindować do struktury a nie do klasy:

And a struct is not an appropiate type for the data you're trying to represent.

Wystarczyła zmiana słówka 'struct' na 'class'.

btw. fajna sprawa z tym opcjonalnym parametrem w konstruktorze - nie znałem tego ;)

Podobne pytania

0 głosów
1 odpowiedź 485 wizyt
0 głosów
0 odpowiedzi 197 wizyt
0 głosów
1 odpowiedź 375 wizyt
pytanie zadane 15 maja 2019 w C# przez DrajzleR Obywatel (1,380 p.)

92,681 zapytań

141,583 odpowiedzi

320,070 komentarzy

62,041 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...