我刚开始编写自己的小状态图表编辑器。我希望它是MVVM模式。 但是我遇到了将事件绑定到viewmodel中的命令的问题。
运行我的应用程序时,会出现此InvalidCastException。
System.InvalidCastException:无法将类型为“System.Reflection.RuntimeEventInfo”的对象强制转换为“System.Reflection.MethodInfo”。
我的xaml文件中有以下代码段。
<UserControl.Resources>
<vm:StateViewModel x:Key="StateViewModel"/>
</UserControl.Resources>
<Grid DataContext="{StaticResource StateViewModel}">
<Rectangle MouseLeftButtonDown="{Binding Path=DragStartCommand}">
</Grid>
在我的StateViewModel中,我创建了ICommand属性。
private DelegateCommand _dragStartCommand;
public ICommand DragStartCommand
{
get
{
if (_dragStartCommand == null)
{
_dragStartCommand = new DelegateCommand(StartDragging);
}
return _dragStartCommand;
}
}
private void StartDragging(object obj)
{
// ...
}
,DelegateCommand类如下所示
public class DelegateCommand : ICommand
{
private readonly Predicate<object> _canExecute;
private readonly Action<object> _execute;
public event EventHandler CanExecuteChanged;
public DelegateCommand(Action<object> execute)
: this(execute, null)
{
}
public DelegateCommand(Action<object> execute, Predicate<object> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object parameter)
{
if (_canExecute == null)
{
return true;
}
return _canExecute(parameter);
}
public void Execute(object parameter)
{
_execute(parameter);
}
public void RaiseCanExecuteChanged()
{
if (CanExecuteChanged != null)
{
CanExecuteChanged(this, EventArgs.Empty);
}
}
}
我希望你能帮我解决问题。 为了这个,我很高兴知道如何将EventArgs传递给我的命令并使用它们。
答案 0 :(得分:0)
您可以使用blend sdk
中的EventToCommand Behaviorxmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<DataGrid>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<Commanding:EventToCommand Command="{Binding Path=OpenCommand}"
CommandParameter="{Binding YourParameterBindingGoesHereIfYouNeedIt}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
或者你看看MVVMLight还有这样的行为