2011-09-06 75 views
4

我一直在嘗試使用WPF的Datagrid RowEditEnding在MVVM環境

<b:Interaction.Triggers> 
    <b:EventTrigger EventName="RowEditEnding"> 
     <b:InvokeCommandAction Command="{Binding ReleaseRowEditEndingCommand}" CommandParameter="{Binding SelectedRelease}"/> 
    </b:EventTrigger> 

來捕獲用戶進入一個DataGrid的價值觀但是,這並不工作,我現在明白了這在閱讀StackOverflow上的this文章後。該方案提出的所有似乎是基於直接調用該匹配被引發事件的方法簽名,在這種情況下

private void OnRowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 

有沒有人來完成獲得在MVVM形勢的價值觀rowedit後?所有解決方案似乎都將事件與XAML緊密結合,如果可能,我希望避免這種情況。

回答

1

解決方案實際上比我想象的要容易。我更改了XAML,現在我可以在View Model的RowEditEnding事件中獲取值。下面是之前在數據網格中的數據列:

<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> 
+0

只是爲了記錄UpdateSourceTrigger =引發LostFocus的伎倆了。當你使用字符串格式化並且你不想要一團糟的時候它很有用 – GorillaApe

0

您可以嘗試將數據包裝在ListCollectionView中並將DataGrid綁定到ListCollectionView。然後,在您的ViewModel中,掛接到ListCollectionView.CurrentChanging事件來處理您的更改,然後再移動到新行。