2010-11-17 2 views
0

У меня есть datagrid, который отображает список заказов. Над данным datagrid есть окно, которое фильтрует заказы, захватывая ввод текста, а затем вызывает метод на стороне сервера, чтобы получить заказы, соответствующие предоставленному тексту. Это хорошо работает на странице.Silverlight datagrid не привязывается к новым данным

Я попытался добавить страницу, которая передается в параметрах через querystring, которая автоматически применяет фильтр, когда пользователь приземляется на странице. Код для вызова метода на стороне сервера вызывается правильно, и данные возвращаются правильно, но дататус не показывает результаты. Если я введу тот же текст в текстовое поле на странице и поиск, результаты, наконец, будут показаны на datagrid. Это почти похоже на то, что датапард не видит изменения при первом входе пользователя на страницу с автоматическим фильтром. Вот некоторые relavent биты:

protected override void OnNavigatedTo(NavigationEventArgs e) { 
     if (NavigationContext.QueryString.ContainsKey("filterkeyword") && NavigationContext.QueryString.ContainsKey("filtervalue")) { 
      string filterkeyword = NavigationContext.QueryString["filterkeyword"]; 
      string filtervalue = NavigationContext.QueryString["filtervalue"]; 

      switch (filterkeyword) { 
       default: ApplyDefaultFilter(filtervalue); break; 
      } 
     } else { 
      ApplyDefaultFilter(""); 
     } 
    } 

сетке данных просто привязанные к объекту источника данных и источник данных не установлен в режим автоматического нагрузки. Вот биты для того, когда пользователь делает выполнения поиска с помощью окна фильтра:

private void txtFilter_KeyDown(object sender, KeyEventArgs e) { 
     if (e.Key == Key.Enter) { 
      ApplyDefaultFilter(txtFilter.Text); 
      txtFilter.Select(0, txtFilter.Text.Length); 
     } 
    } 

Они оба называют одни и те же методы и возвращать результаты, это просто, что текстовое поле как-то говорит страницу, чтобы обновить DataGrid и волшебным образом данные появляются. Есть ли какое-то событие, которое я могу заставить на странице вызвать обновление datagrid?

ответ

0

Вы используете объект datasouce INotifyPropertyChanged или это коллекция, это ObservableCollection?

TextBox отступает от изменений AFAIK.

0

Я добавил это, и это, кажется, работает ... хотя это похоже на немного kludge.

void ordersDataSource_LoadedData(object sender, LoadedDataEventArgs e) { 
     ordersDataGrid.ItemsSource = e.Entities; 
    } 

Мне не нужно было это при фильтрации на странице, но перенаправление пользователя на страницу требует этого ... нечетного.

Смежные вопросы