刷新或设置selectedIndex = -1后,Silverlight DataGrid绑定问题

时间:2010-12-03 01:56:20

标签: silverlight data-binding

我在表单上有一个datagrid和一个组合框。组合框绑定到数据网格的selectedItem。

我加载的东西很好,如果我选择不同的行,组合框会正确更新。

但是,如果我在加载后设置datagrid.selectedIndex = -1(以便不选择第一行),则组合框绑定不再起作用。这是一个问题。

我还有另一个场景,确切的事情发生了。如果我过滤数据网格,则对组合框的绑定也会停止工作。

我将datagrid绑定到CollectionViewSource,如下所示_codes是ObservableCollection

            _ocvsCode = (CollectionViewSource)this.Resources["cvsCode"];
            _ocvsCode.Source = _codes;                
            dataGrid1.ItemsSource = _ocvsCode.View;

我不知道为什么在对数据网格进行某些操作后,对组合框的绑定失败了。

2 个答案:

答案 0 :(得分:2)

在这种情况下,适当的解决方案是将datagrid selecteditem绑定到某个变量,然后将其他控件绑定到该变量。将UIElement属性直接绑定到其他UIElement属性通常是不好的做法。这也将调试您在将selecteditem属性强制转换为组合框时遇到的问题。

答案 1 :(得分:0)

我遇到了同样的问题,其中ComboBox绑定到DataGrid的SelectedItem的值。

当绑定的数据变为空时,ComboBox控件会中断,并且永远不会恢复。我不确定为什么会这样,但在我看来它是一个错误。当DataGrid对列进行排序时,它首先将其SelectedItem设置为null,执行排序,然后将SelectedItem重置为原始值。当SelectedItem变为null时,ComboBox会中断。

这是我的工作:

在您的类上创建一个用于DataContext的SelectedItem属性。 对setter执行检查,以防止将其设置为null。使用DataGrid和ComboBox绑定此属性。

public YourItem SelectedItem
{
    get { return _selectedItem; }
    set
    {
        if (value == _selectedItem || value == null)
            return;

        _selectedItem = value;
        RaisePropertyChanged("SelectedItem");
    }
}