Bindowanie danych w listview z jednej classy

Odpowiedz Nowy wątek
2015-02-02 15:41
.Al
0

Witam

Do rzeczy. Taki przykład:
Mam 3 listview w oknie i jedna klase MainClass, w ktorej sa 3 Listy. Jak do kazdej kontrolki bindować dane z osobnej listy?

private ObservableCollection<MainClass> ToBinding = new ObservableCollection<MainClass>();
public ObservableCollection<MainClass> DataBinding
{
    get { return this.ToBinding; }
}

public class MainClass
{
    public List<Class1> class1 { get; set; }
    public List<Class2> class2 { get; set; }
    public List<Class3> class3 { get; set; }
}

public class Class1
{
    public string Name { get; set; }
}

public class Class2
{
    public string Name { get; set; }
}

public class Class3
{
    public string Name { get; set; }
}

próbowałem coś takiego, ale chyba to by było za proste :}

<ListView Grid.Row="0" ItemsSource="{Binding DataBinding.class1 }"> // DataBinding
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Nazwa" DisplayMemberBinding="{Binding Name}"/> //class1.Name
        </GridView>
    </ListView.View>
</ListView>

dodam, że dla pól i jednej controlki działa, chodzi mi tylko o przykład j/w.

Pozostało 580 znaków

2015-02-02 15:49
1

Ten model mi sie dziwny wydaje. Z niego wynika, ze masz kolekcje obiektów MainClass, kazdy element tej kolekcji ma w sobie 3 pod-kolekcje, a na poczatku piszesz, ze masz 3 listview...
To nie powinno byc tak:

public class MainClass
{
    public ObservableCollection<Class1> class1 { get; set; }
    public ObservableCollection<Class2> class2 { get; set; }
    public ObservableCollection<Class3> class3 { get; set; }
}

public class Class1
{
    public string Name { get; set; }
}

public class Class2
{
    public string Name { get; set; }
}

public class Class3
{
    public string Name { get; set; }
}

?

No i oczywiscie DataContext musisz odpowiednio ustawic wczesniej

edit: I wiadomo - do osobnych list views bindujesz osobne propertiesy z tego glownego modelu, class1, class2 itd. Dodatkowo przydaloby sie zaimplementowac INotifyPropertyChanged jesli te propertiesy beda sie jakos zmieniac

edytowany 1x, ostatnio: FakeAccount, 2015-02-02 15:55

Pozostało 580 znaków

2015-02-02 16:16
.Al
0

faktycznie się coś zapędziłem, i teraz widzę, że jest źle. Ogólnie chciałem coś takiego mieć:

Collection
-MainClass
-class1
-class2
-class3
-MainClass
-class1
-class2
-class3
-MainClass
-class1
-class2
-class3
-MainClass
-class1
-class2
-class3

i w zależności od wybranego obiektu wyświetlić dane (w tym przykładzie do trzech ListView). Muszę pozmieniać.

Pozostało 580 znaków

2015-02-02 17:01
0

W takim wypadku powinno być:

class MainClass
{
    public Class1 C1 {get;set;}
    public Class2 C2 {get;set;}
    public Class3 C3 {get;set;}
}

i do tego ObservableCollection<MainClass>

Pozostało 580 znaków

2015-02-02 19:27
.Al
0

tzn tak:
MainClass to miały być obiekty w kolekcji, a class1, class2 to List<> w obiekcie MainClass.

Rozwiązałem to tak:
na kolejnych listView dodałem jako ItemSource:

ItemsSource="{Binding ElementName=pierwsza listview, Path=SelectedItem.list (ObservableCollection<>) z obiektu MainClass}">

Nie wiem czy to najlepsze rozwiązanie ale działa. Po kliknięciu na itemy w listView w kolejnych controlkach mam to co chcialem.

edytowany 1x, ostatnio: .Al, 2015-02-02 19:28

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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