2010-12-03 60 views
3

我有一个datagrid和窗体上的组合框。组合框绑定到数据网格的selectedItem。Silverlight DataGrid绑定问题后刷新或设置selectedIndex = -1

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

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

我也有另一种情况发生确切的事情。如果我筛选数据网格,绑定到组合框也停止工作。

我将DataGrid绑定到像CollectionViewSource以下,其中_codes是一个ObservableCollection

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

我不知道为什么绑定到ComboBox DataGrid上一些手术后失败。

+0

注意...我也有一个文本框绑定到网格的selectedItem。它继续正常工作。它是组合框似乎被打破...奇 – David 2010-12-03 01:58:11

回答

2

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

0

我碰到过同样的问题,其中一个ComboBox被绑定到一个DataGrid的SelectedItem的值。

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

这里是我的解决方法:

创建你的类,它被用于DataContext的一个SelectedItem属性。 对setter进行检查,以防止它被设置为null。使用DataGrid和ComboBox绑定此属性。

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

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