我有一个XamDataGrid
,DataTable
作为来源:
dataPresenter:XamDataGrid Grid.Row="1" DataSource="{Binding TestData}" GroupByAreaLocation="None"
我使用MVVM Light来处理命令。在我的视图模型中,我有:
public class MainViewModel: ViewModelBase
{
public RelayCommand OnCancel { get; set; }
private DataTable _testData;
public DataTable TestData
{
get { return _testData; }
set { Set(() => TestData, ref _testData, value); }
}
public MainViewModel()
{
OnCancel = new RelayCommand(Cancel);
}
private void Cancel()
{
TestData.RejectChanges();
}
}
要处理我想要使用Windows功能区的命令:
<r:Ribbon Grid.Row="0" >
<r:RibbonTab >
<StackPanel Orientation="Horizontal">
<r:RibbonButton Label="Get Data" Command="{Binding OnGetData}"/>
<r:RibbonButton Label="Cancel" Command="{Binding OnCancel}"/>
</StackPanel>
</r:RibbonTab>
</r:Ribbon>
<!--<StackPanel Orientation="Horizontal">
<Button Content="Get Data" Command="{Binding OnGetData}" Margin="0,0,20,0" Height="40"/>
<Button Content="Cancel" Command="{Binding OnCancel}" Height="40"/>
</StackPanel>-->
使用RibbonButton
与Button
时,我的行为会有所不同。我想要的是拒绝XamDataGrid
所做的任何更改。当我使用Button时,DataTable
和XamDataGrid
相应更新将被拒绝。当我更改代码以便RibbonButton
执行Cancel
方法时,这不会发生。这种行为似乎是零星的。即使我在XamDataGrid
中看到更改被拒绝,DataTable
也未正确更新。为什么会发生这种情况?