MVF Datagrid在MVVM环境中的RowEditEnding

时间:2011-09-06 21:09:55

标签: wpf mvvm datagrid prism

我一直在尝试使用

捕获用户输入数据网格的值
<b:Interaction.Triggers>
    <b:EventTrigger EventName="RowEditEnding">
        <b:InvokeCommandAction  Command="{Binding ReleaseRowEditEndingCommand}" CommandParameter="{Binding SelectedRelease}"/>
    </b:EventTrigger>

但是这不起作用,我现在在阅读有关StackOverflow的this文章时就明白了这一点。所提出的解决方案似乎都基于直接调用与所引发事件匹配的方法签名,在本例中为

private void OnRowEditEnding(object sender, DataGridRowEditEndingEventArgs e)

有没有人在MVVM情况下完成了post-rowedit的值?所有解决方案似乎都将事件紧密地绑定到XAML,如果可能的话,我想避免这种情况。

2 个答案:

答案 0 :(得分:1)

解决方案实际上比我想象的要容易。我更改了XAML,现在我可以在View Model上的RowEditEnding事件中获取值。这是datagrid上数据列的before:

 <DataGrid.Columns>
    <DataGridCheckBoxColumn Header="Is Paid" Binding="{Binding IsPaid, Mode=TwoWay}" />
    <DataGridTextColumn Header="Amount" Binding="{Binding Amount, Mode=TwoWay}" />
</DataGrid.Columns>

 <DataGrid.Columns>
    <DataGridCheckBoxColumn Header="Is Paid" Binding="{Binding IsPaid, UpdateSourceTrigger=PropertyChanged}" />
    <DataGridTextColumn Header="Amount" Binding="{Binding Amount,  UpdateSourceTrigger=PropertyChanged}" />
</DataGrid.Columns>

答案 1 :(得分:0)

您可以尝试将数据包装在ListCollectionView中,并将DataGrid绑定到ListCollectionView。然后,在ViewModel中,挂钩到ListCollectionView.CurrentChanging事件以处理您的更改,然后再移动到新行。