【发布时间】:2018-07-04 19:37:51
【问题描述】:
有没有办法将事件绑定到命令没有 System.Windows.Interactivity 或任何其他第三方库?
到目前为止,我已经尝试了以下方法:
<Style TargetType="DataGridRow">
<EventSetter Event="MouseDoubleClick"
Handler="{Binding DoubleClickCommand}" />
</Style>
和
<DataGrid.InputBindings>
<MouseBinding Gesture="LeftDoubleClick" Command="{Binding DoubleClickCommand}"/>
</DataGrid.InputBindings>
和
<DataGrid ItemsSource="{Binding Model.SpectrumCollections}"
ColumnWidth="*"
AutoGenerateColumns="false"
IsReadOnly="True"
BorderThickness="0"
HeadersVisibility="Column" MouseDoubleClick="{Binding DoubleClickCommand}">
但似乎没什么用,任何帮助将不胜感激。
编辑 1: 这是我使用的 RelayCommand 的实现,也许问题就在那里..
public class RelayCommand : ICommand
{
private readonly Func<bool> _canExecute;
private readonly Action _execute;
public RelayCommand(Action inExecute, Func<bool> inCanExecute = null)
{
_execute = inExecute ?? throw new Helper.Exceptions.DelegateCommandException(
Exceptions.InExecuteIsNullException);
_canExecute = inCanExecute;
}
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
public bool CanExecute(object inObject) => _canExecute?.Invoke() ?? true;
public void Execute(object inObject) => _execute?.Invoke();
}
【问题讨论】:
-
为什么你不想使用,已经制作好的包,这正是你所要求的?
-
因为项目的要求之一是不使用第三方包,很遗憾。而且我相信实施起来应该不会那么难。
-
System.Windows.Interactivity是 Blend SDK 的一部分。这是 WPF 应用程序的设计器软件。我不会将它归类为第三方包,因为它专门用于 Blend。现在我让它工作了,但是你必须为每个Cell指定DataTemplate。只有当用户双击实际的DataGridNOTCell时,您的第二次尝试才会起作用,这是有区别的。双击单元格触发编辑模式。 -
MouseBinding Command="{Binding DoubleClickCommand}" Gesture="LeftDoubleClick" 一切正常
-
我明白你的观点@XAMlMAX,我完全理解重新发明轮子的含义,但我不是满足要求的人。
标签: c# wpf mvvm wpf-controls wpfdatagrid