我在表单上有一个datagrid和一个组合框。组合框绑定到数据网格的selectedItem。
我加载的东西很好,如果我选择不同的行,组合框会正确更新。
但是,如果我在加载后设置datagrid.selectedIndex = -1(以便不选择第一行),则组合框绑定不再起作用。这是一个问题。
我还有另一个场景,确切的事情发生了。如果我过滤数据网格,则对组合框的绑定也会停止工作。
我将datagrid绑定到CollectionViewSource,如下所示_codes是ObservableCollection
_ocvsCode = (CollectionViewSource)this.Resources["cvsCode"];
_ocvsCode.Source = _codes;
dataGrid1.ItemsSource = _ocvsCode.View;
我不知道为什么在对数据网格进行某些操作后,对组合框的绑定失败了。
答案 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");
}
}