【问题标题】:Problems with the selected index in the WPF DataGridWPF DataGrid 中选定索引的问题
【发布时间】:2013-02-13 07:09:44
【问题描述】:

我有一个wpf DataGrid。

在 DataGrid 上,选定的索引绑定到 ViewModel 中的变量。

代码如下:

<DataGrid DataContext="{Binding MyViewModel}" SelectedIndex="{Binding SelectedXIndex,Mode=TwoWay}"  ItemsSource="{Binding xList, Mode=TwoWay}" AutoGenerateColumns="False" GridLinesVisibility="Horizontal">
    <DataGrid.Columns>
      ...
    </DataGrid.Columns>
</DataGrid>

在 ViewModel 中,我有一个 X 类(可观察集合)中的项目列表,并且我有选定的索引变量:

    private int _selectedXIndex;
    public int SelectedXIndex
    {
        get { return _selectedXIndex; }
        set
        {
            _selectedXIndex = value;
            NotifyPropertyChanged("SelectedXIndex");
        }
    }

当我单击 DataGrid 中的某个项目时,选定的索引发生了变化,并且当我在 ViewModel 的构造函数中对其进行初始化时,DataGrid 中发生了更改,但是当我在某个函数上对其进行初始化时,仅在 ViewModel 中而不是在数据网格:

  public void MoveDown()
    {
        SelectedXIndex++;         
    }

我不明白为什么会这样!

编辑:

我在函数中添加了以下代码行:

xList[SelectedXIndex].Name = "Changest Name For Test";

它有效。

他更改了模型的 Selected Item 所在行的名称,但他没有在 DataGird 上显示所选项目就是那个。

【问题讨论】:

  • 在您显示的代码之外一定有某些东西导致了您的问题。创建了一个新应用程序,并添加了您在此处输入的内容以及 INotifyPropertyChanged 实现、一些虚拟数据和一个触发 MoveDown 调用的按钮,它工作得很好

标签: wpf mvvm binding datagrid selectedindex


【解决方案1】:

除非我弄错了,否则通过执行 SelectedXIndex++ 您不会再次重置 SelectedXIndex,因此不会调用 NotifyPropertyChanged。

要么做: SelectedXIndex = _selectedXIndex++;

或者:

继续你所拥有的,然后在 MoveDown 的增量之后立即调用通知。

【讨论】:

  • 如果我做 SelectedXIndex++ 然后 NotifyPropertyChanged 也调用了,但无论如何我也尝试过这种方式:SelectedXIndex = SelectedXIndex+1;,它没有工作。
  • 这似乎是一个类似的问题。希望他们的答案可能有用:wpf-datagrid-selecteditem-null-in-mvvm
猜你喜欢
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-03
  • 2011-07-10
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多