Привет. Я пытаюсь поддерживать модель MVVM, но где-то спотыкаюсь при попытке привязаться к списку. При первом запуске приложения я установил ItemCatalog (ObservableCollection) как определенный список ObservableCollection. Список пуст, но если я попробую еще раз, он сработает. Однако существует задержка между источником данных и отображаемыми данными. Например,
Я загружаю приложение -> устанавливаю источник на X -> Список пуст
Теперь я установил источник на Y -> в списке отображается X
Я установил источник на Z -> Listbox отображает Y и т.д..
Для меня это означает, что привязка работает, но я не могу понять, почему она отстает на единицу.
Мой XAML выглядит так:
<ListBox ItemsSource="{Binding ItemCatalog}">
<DataTemplate>
<StackPanel Margin="0,0,0,17" Width="432">
<TextBlock Text="{Binding Ref}" TextWrapping="Wrap" Foreground="Black" />
<TextBlock Text="{Binding ItemName}" TextWrapping="Wrap" Margin="12,-6,12,0" Foreground="Black" />
</StackPanel>
</DataTemplate>
</ListBox>
В ViewModel значение ItemCatalog зависит от того, какую кнопку нажал пользователь (X,Y,Z), которые хранятся в статической переменной. Есть ли причина задержки или способ заставить его повторно привязаться к последнему значению ItemCatalog?
Если я удаляю привязку из XAML и устанавливаю источник списка прямо из кода программной части, он работает отлично. Однако я хочу попытаться сохранить код XAML. Я новичок в MVVM, поэтому, возможно, я делаю это неправильно. Благодарность
РЕДАКТИРОВАТЬ - дополнительный код
Код изменен в методе OnNavigatedTo
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
if (NavigationContext.QueryString["Category"].ToString() == "House")
{
_categoryType = Models.House;
}
if (NavigationContext.QueryString["Category"].ToString() == "Car")
{
_categoryType = Models.Car;
}
MyViewModel.LoadNewData(_categoryType);
base.OnNavigatedTo(e);
}
LoadNewData просто устанавливает статическую переменную на основе переданного параметра.
ItemCatalog = App.CarCatalog;
По сути, мне нужно выполнить повторную привязку после загрузки страницы через XAML.