2010-11-17 72 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; 
    } 

我不需要它在頁面內過濾,但重定向用戶到頁面需要這個......奇怪。