在DataGrid
我有一个像这样定义的列。
<DataGridTemplateColumn Width="Auto">
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
APPROACH
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
第一种方法
<Button Template="{StaticResource CloseTabButton}" Command="{Binding DataContext.DeleteRangeCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" CommandParameter="{Binding}"/>
第二种方法
<Button Template="{StaticResource CloseTabButton}" Command="{Binding ElementName=CurrentWindow, Path=DataContext.DeleteRangeCommand}" CommandParameter="{Binding}"/>
在ViewModel中:
public RelayCommand<Range> DeleteRangeCommand
{
get { return _deleteRangeCommand ?? (_deleteRangeCommand = new RelayCommand<Range>((x) => ReportGroup.Ranges.Remove(x))); }
}
两种方法都应该相同。问题是,在某些计算机上 - 我猜这些没有Visual Studio安装,第二种方法不起作用。什么都没有发射,我试图附加远程调试器和命令不被触发。为什么这可能?
OfCourse CurrentWindow
是x:Name
的Window,DataContext
设置为ViewModel