Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 2
  • 67

Witam,

chciałem w WPF-ie, korzystając z dwóch Gridów, zrobić relację Master/Detail. Mam tablice Customers oraz Orders. Nie ma między tablicami relacji. Na chwilę obecną zrobiłem to w sposób łopatologiczny. Na kliknięcie w grid master ładuję odpowiednie dane do grid detail:

private void dgma_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            Detail det1 = new Detail();
            var detail = e.AddedItems[0] as Customer;
            dgde.ItemsSource = det1.Where(b => b.Name == detail.Name);
        }


Czy można to zrobić w sposób bardziej profesjonalny? Korzystam z LINQ to SQL.

Pozdrawiam

 

Bogdan_Chlebowski_DCHK
  • Zapytał
  • @ Bogdan_Chlebowski_DCHK | 20.05.2015
    • 3
    • 4
    • 12
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 2

Z pewnością w WPF-ie preferowanym rozwiązaniem będzie użycie wbudowanych mechanizmu łączenia kontrolek z danymi (Binding) zamiast podejścia zdarzeniowego. Warunkiem działania jest utworzenie jednego hierarchicznego źródła danych i powiązanie kontrolek do takiego źródła z automatyczną ich synchronizacją przez właściwość  IsSynchronizedWithCurrentItem kontrolki obsługującej wiązanie. W źródle danych nie musi być relacji, ale powinna być ustanowiona hierarchia, np. klasa Customer posiada składową typu kolekcji rodzajowej Order:


    public class Customer
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public IEnumerable<Order> Orders { get; set; }
    }
    public class Order
    {
        public int Id { get; set; }
        public DateTime OrderDate { get; set; }
        public decimal Amount { get; set; }
    }

 


Kompletny opis wzorca i przykładu jego implementacji w artykule: How to: Use the Master-Detail Pattern with Hierarchical Data

Przykład z implementacją Linq2SQL: http://blog.vyvojar.cz/lukaashek/archive/2009/05/25/wpf-master-detail-view-based-on-linq-to-sql.aspx

 

  • Odpowiedział
  • @ | 08.06.2015
  • TRENER ALTKOM AKADEMII
Komentarze
Bardzo dziękuje za wskazówkę. Zmodyfikowałem klasy i działa. Wykorzystałem ItemsSource="{Binding ElementName Path=SelectedItem.Orders dla Details
Skomentował : @ Bogdan_Chlebowski_DCHK ,11.06.2015
  • 3
  • 4
  • 12