Silverlight数据网格不重新绑定到新数据

时间:2010-11-17 16:02:15

标签: silverlight data-binding datagrid

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

我尝试添加一个通过查询字符串传递参数的页面,当用户登陆页面时会自动应用过滤器。正确调用调用服务器端方法的代码并正确返回数据,但datagrid不显示结果。如果我在页面上的文本框中键入相同的文本并进行搜索,结果最终会显示在数据网格上。这几乎就像数据网格在用户第一次使用自动过滤器进入页面时看不到更改。这是一些相关的比特:

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);
        }
    }

他们都调用相同的方法并返回结果,只是文本框以某种方式告诉页面刷新数据网格并且神奇地显示数据。是否有一个事件我可以在页面上强制刷新数据网格?

2 个答案:

答案 0 :(得分:0)

我添加了这个并且似乎有效...虽然这看起来像是一点点kludge。

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

在页面中进行过滤时我不需要它,但是将用户重定向到页面需要这个......奇怪。

答案 1 :(得分:0)

您是数据源对象实现INotifyPropertyChanged还是它是一个集合,它是ObservableCollection吗?

TextBox重新更改AFAIK。