2010-11-17 74 views
0

我有一个数据网格显示订单列表。在数据网格上方,有一个框可以通过捕获文本输入来过滤订单,然后调用服务器端方法来获取与提供的文本匹配的订单。这在页面上正常工作。Silverlight datagrid不重新绑定到新数据

我试过添加一个页面,通过查询字符串参数传递,当用户登陆页面时会自动应用过滤器。调用服务器端方法的代码被正确调用并且数据正确返回,但datagrid不显示结果。如果我在页面上的文本框中输入相同的文本并搜索,结果最终会显示在数据网格中。这几乎就像用户在第一次使用自动过滤器进入页面时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和神奇的是数据出现。是否有一个事件可以在页面上强制刷新数据网格?

回答

0

你的数据提示对象是否实现了INotifyPropertyChanged或者它是否是一个集合,是否为ObservableCollection

TextBox重新变更AFAIK。

0

我添加了这个,它似乎工作...虽然这似乎有点kludge。

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

我不需要它在页面内过滤,但重定向用户到页面需要这个......奇怪。