0

我有一个wpf数据网格。

在 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 中而不在 DataGrid 中更改:

  public void MoveDown()
    {
        SelectedXIndex++;         
    }

我不明白为什么会这样!

编辑:

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

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

它有效。

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

4

1 回答 1

0

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

要么做:SelectedXIndex = _selectedXIndex++;

或者:

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

于 2013-02-13T07:14:15.433 回答