Привязка списка - задерживается одним источником - PullRequest
2 голосов
/ 01 октября 2010

эй. Я пытаюсь сохранить модель MVVM, но где-то отключаюсь при попытке привязки к списку. При первом запуске приложения я установил ItemCatalog (ObservableCollection) как определенный список ObservableCollection. Список пуст, но если я попробую еще раз, это сработает. Однако существует разрыв между источником данных и отображаемыми данными. Например,

Я загружаю приложение -> установить источник на X -> Список пусто

Теперь я установил источник на Y -> Отображение списка X

Я установил источник на Z -> Отображение списка 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.

Ответы [ 2 ]

3 голосов
/ 01 октября 2010

По предположению (так как на самом деле не хватает кода для продолжения), ваша ViewModel вызывает изменение свойства даже до того, как поле с поддержкой ItemCatalog будет фактически назначено. Что-то вроде: -

 ObservableCollection<Stuff> _ItemCatalog;
 ObservableCollection<Stuff> ItemCatalog 
 {

    get { retutn _ItemCatalog; }
    set
    {
       PropertyChanged("ItemCatalog");
       _ItemCatalog = value;
    }
 }

Это может привести к описанному вами поведению.

0 голосов
/ 01 октября 2010

Вы не показываете код, где вы меняете источник с X на y, но из объясненного поведения я бы предположил, что привязка данных в вашем представлении интерпретируется до того, как это изменение произойдет.

...