【问题标题】:Selected item is not synchronizing with selected items - a WPF DataGrid所选项目未与所选项目同步 - WPF DataGrid
【发布时间】:2013-02-13 08:30:01
【问题描述】:

怎么可能SelectedItem 为空而SelectedItems 选择了一个项目?

这是选择更改事件的屏幕截图:

我的数据网格:

 <DataGrid SelectionChanged="CustomCmdDg_SelectionChanged" SelectedItem="{Binding CurrentX,Mode=TwoWay}" DataContext="{Binding MyViewModel}" x:Name="CustomCmdDg"  ItemsSource="{Binding xList}" AutoGenerateColumns="False" GridLinesVisibility="Horizontal">

... 在我的 ViewModel 中:

xList= 类 x 的列表(可观察的集合)

  private x currentX;

    public x CurrentX
    {
        get { return currentX; }
        set
        {
            currentX = null;
            NotifyPropertyChanged("CurrentX");
        }
    }

故意希望所选项目为空

【问题讨论】:

  • 你能提供一些代码,你的绑定,背后的代码
  • 粘贴ViewModel的代码
  • 列表可能包含空元素
  • 它不在列表中,this 在变量中.. 目标是不会选择任何项目
  • 而且如果我在SelectedItem中放了一些别的东西,它也在列表中找到,它仍然与SelectedItems不同。在 Items 中,我得到了从 UI 中按下的内容与同样通过代码更改的项目。

标签: wpf data-binding datagrid


【解决方案1】:

如果您将 currentitem 设置为 null,您应该首先将其从集合中删除,然后它将从选定的项目中消失:

Public ObservableCollection<x> xList

public x CurrentX
{
    get { return currentX; }
    set
    {
        xList.Remove(currentX)
        currentX = null;
        NotifyPropertyChanged("CurrentX");
    }
}

您的可观察列表会自行更新

如果您需要能够操作 SelectedItems 集合,您还必须提供绑定并执行所需的代码

【讨论】:

  • 我不希望从列表中删除该项目,我只是希望他不要通过代码选择/更改
  • 我不想控制选中的项,与选中的项不同步似乎不合逻辑。
  • 当这种情况发生在您的 UI 中时,它们会被同步,而不是来自后面的代码
  • 那么唯一的办法就是将它们后面的代码同步来控制选中的项目?
  • 您可以尝试添加:NotifyPropertyChanged("xList");这将触发 Observable 集合的更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2012-09-25
  • 1970-01-01
相关资源
最近更新 更多