Op het moment ben ik bezig om mijn eerste Windows Phone 8 app te maken. Daarbij loop ik aan tegen een probleem, namelijk het correct laten binden van de ObservableCollection uit mijn ViewModel.cs aan de View.xaml. Deze wil namelijk niet zonder omweg binden. Ik zal de relevante code zo hieronder zo kort mogelijk samenvatten.
Mijn xaml ziet er zo uit:
De relevante codebehind:
Vervolgens maak in mijn ViewModel de TeamLijst aan. Deze vult gewoon normaal. Als ik deze alleen zoals in Refres() direct wegschrijf dan krijg ik het niet voor elkaar om de gegevens aan de view te binden. Ik heb vanalles met INotifyChanged en ICommand geprobeerd, maar daar kwam ik niet uit.
Waarom werkt dit met die Foreach loop opeens magisch wel? En hebben jullie tip hoe ik dit zonder zulke lelijke extra code voor elkaar kan krijgen? Ik heb al heel veel sites afgezocht (msdn!) en ik heb het idee dat ik in de hoek van INotifyChanged moet zoeken, maar deze krijg ik niet onder de knie.
Mijn xaml ziet er zo uit:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
| <pivot title=mijnApp"> <phone:PivotItem Header="Uitslagen"> <phone:LongListSelector ItemsSource="{Binding Path=TeamLijst}" > <phone:LongListSelector.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Voornaam}" /> <TextBlock Text="{Binding Achternaam}" /> </DataTemplate> </phone:LongListSelector.ItemTemplate> </phone:LongListSelector> </phone:PivotItem> </pivot> |
De relevante codebehind:
C#:
1
2
3
4
5
| protected override void OnNavigatedTo(NavigationEventArgs e) { this.DataContext = App.ViewModel; App.ViewModel.Refresh(); } |
Vervolgens maak in mijn ViewModel de TeamLijst aan. Deze vult gewoon normaal. Als ik deze alleen zoals in Refres() direct wegschrijf dan krijg ik het niet voor elkaar om de gegevens aan de view te binden. Ik heb vanalles met INotifyChanged en ICommand geprobeerd, maar daar kwam ik niet uit.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| public ObservableCollection<persoon> TeamLijst { get; set; } // Werkt Niet public async void Refresh() { Team team = new Team(); TeamLijst = await team.GeefTeam(); } // Werkt wel public async void RefreshLand() { Team team = new Team(); temp = await team.GeefTeam(); foreach (var item in temp) { TeamLijst.Add(item); } } |
Waarom werkt dit met die Foreach loop opeens magisch wel? En hebben jullie tip hoe ik dit zonder zulke lelijke extra code voor elkaar kan krijgen? Ik heb al heel veel sites afgezocht (msdn!) en ik heb het idee dat ik in de hoek van INotifyChanged moet zoeken, maar deze krijg ik niet onder de knie.