【问题标题】:Silverlight DataGrid binding issues after refreshing or setting selectedIndex=-1刷新或设置 selectedIndex=-1 后的 Silverlight DataGrid 绑定问题
【发布时间】:2010-12-03 01:56:19
【问题描述】:

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

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

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

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

我将数据网格绑定到 CollectionViewSource,如下所示,其中 _codes 是 ObservableCollection

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

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

【问题讨论】:

  • 注意...我还有一个绑定到网格的 selectedItem 的文本框。它继续正常工作。似乎是组合框被打破了......奇怪
  • 此外,如果我更改组合框中的值,则将来对数据网格行的任何选择都不会反映在组合框中。就像网格和组合框之间的绑定是临时的。
  • 你能展示一些相关的xaml吗?

标签: silverlight data-binding


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我也遇到过同样的问题,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");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-09-21
      • 2011-08-15
      • 2023-04-09
      • 2010-11-22
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2014-06-05
      相关资源
      最近更新 更多