C# 如何将EventArgs传递给DelegateCommand?
我有一个C# 如何将EventArgs传递给DelegateCommand?,c#,xamarin,mvvm,xamarin.forms,prism,C#,Xamarin,Mvvm,Xamarin.forms,Prism,我有一个Xamarin.Forms项目。在Prism中作为MVVM框架。我有一个自定义控件(源于cococossharpview,但这并不重要)。我正在使用参数在该类中引发自定义事件,但无法将此参数传输到ViewModel。代码如下: 视图部分。我正在启动一个带有一些参数的自定义OnTouched事件: public class CustomCocosSharpView : CocosSharpView { public event EventHandler<CustomEvent
Xamarin.Forms
项目。在Prism中作为MVVM框架。我有一个自定义控件(源于cococossharpview
,但这并不重要)。我正在使用参数在该类中引发自定义事件,但无法将此参数传输到ViewModel。代码如下:
视图部分。我正在启动一个带有一些参数的自定义OnTouched事件:
public class CustomCocosSharpView : CocosSharpView
{
public event EventHandler<CustomEventArgs> OnTouched;
public CCGameView gameView;
// ... not important stuff ...
private void OnViewCreated(object sender, EventArgs ea)
{
if (gameView == null)
{
gameView = sender as CCGameView;
if (gameView != null)
{
_gameScene = new GameScene(gameView);
_gameScene.OnTouched += (s, e) =>
{
CustomEventArgs custom = new CustomEventArgs() { Foo = 4 };
OnTouched?.Invoke(s, custom);
};
gameView.RunWithScene(_gameScene);
}
}
OnCreated?.Invoke(sender, ea);
}
}
public class CustomEventArgs : EventArgs
{
public int Foo { get; set; }
}
公共类CustomCoCosHarpView:CoCosHarpView
{
公共事件处理程序未触及;
公共CCGameView gameView;
//…不重要的东西。。。
已创建私有void OnViewCreated(对象发送者、事件参数)
{
如果(gameView==null)
{
gameView=发送方作为CCGameView;
如果(gameView!=null)
{
_游戏场景=新游戏场景(gameView);
_GameSecene.ontoched+=(s,e)=>
{
CustomEventArgs custom=new CustomEventArgs(){Foo=4};
OnTouched?调用(s,自定义);
};
gameView.RunWithScene(_gameScene);
}
}
OnCreated?.Invoke(发送方,ea);
}
}
公共类CustomEventArgs:EventArgs
{
公共int Foo{get;set;}
}
XAML零件:
<mobile:CustomCocosSharpView>
<behaviors:Interaction.Behaviors>
<behaviors:BehaviorCollection>
<behaviors:EventToCommand EventName="OnTouched"
Command="{Binding OnTouchedCommand}" />
</behaviors:BehaviorCollection>
</behaviors:Interaction.Behaviors>
</mobile:CustomCocosSharpView>
最后,视图模型:
private DelegateCommand<CustomEventArgs> onTouchedCommand;
public DelegateCommand<CustomEventArgs> OnTouchedCommand
{
get
{
return onTouchedCommand ?? (onTouchedCommand = new DelegateCommand<CustomEventArgs>((arg) =>
{
Debug.WriteLine("OnTouchCommand " + arg?.Foo.ToString()); //arg is null. Why?
}));
}
}
private DelegateCommand onTouchedCommand;
公共DelegateCommand OnTouchedCommand
{
得到
{
返回onTouchedCommand???(onTouchedCommand=newdelegateCommand((arg)=>
{
Debug.WriteLine(“OnTouchCommand”+arg?.Foo.ToString());//arg为null。为什么?
}));
}
}
问题是:
如何在DelegateCommand中获取CustomEventArgs
参数?这必须是可能的!但什么都不管用:/
谢谢你的帮助 如果您使用的是Prism 6.3-pre2,则可以使用内置的EventToCommand,并通过转换器或路径完全控制传递给DelegateCommand的内容。您可以在此处查看文档:如果您使用的是Prism 6.3-pre2,您可以使用内置的EventToCommand,并使用转换器或路径完全控制传递给DelegateCommand的内容。你可以在这里查看文档:我不确定我是否完全得到了你想要的。。。但是,我认为您要求的是带有参数的命令。有一篇很好的文章是关于我刚刚发现的,我不确定我是否得到了你想要的东西。。。但是,我认为您要求的是带有参数的命令。有一篇很好的文章是关于我刚刚发现的。谢谢Brian,今天晚些时候我会试试。看起来不错。顺便说一句,可以肯定的是,在版本
6.2.0
(将参数从自定义事件传递到命令)中是否可能?这是我现在使用的,不是棱镜。6.2没有Prism EventToCommand行为。等等,什么?我发布的代码是用6.2.0编译和运行的。实际上这是nuget上的最新版本。Prism 6.2.0中肯定有EventToCommand
。我不知道参数-我可以测试它大约4个小时。顺便问一下,如果6.3不在nuget上,我从哪里得到它?你确定你使用的是Prism的EventToCommand而不是其他东西吗?我在6.3的发行说明中提到添加了EventToCommand。6.3正在预览中,只有在包含预览包的情况下才能看到它。哦!我想你是对的!我完全忘了我以前安装过Corcav.Behaviors
。所以从技术上讲,如果我将Prism.Core
和Prism.Forms
更新为6.3,我可以删除Corcav.behavies
?谢谢Brian,我今天晚些时候会尝试。看起来不错。顺便说一句,可以肯定的是,在版本6.2.0
(将参数从自定义事件传递到命令)中是否可能?这是我现在使用的,不是棱镜。6.2没有Prism EventToCommand行为。等等,什么?我发布的代码是用6.2.0编译和运行的。实际上这是nuget上的最新版本。Prism 6.2.0中肯定有EventToCommand
。我不知道参数-我可以测试它大约4个小时。顺便问一下,如果6.3不在nuget上,我从哪里得到它?你确定你使用的是Prism的EventToCommand而不是其他东西吗?我在6.3的发行说明中提到添加了EventToCommand。6.3正在预览中,只有在包含预览包的情况下才能看到它。哦!我想你是对的!我完全忘了我以前安装过Corcav.Behaviors
。所以从技术上讲,如果我将Prism.Core
和Prism.Forms
更新到6.3,我可以删除Corcav.behavies
?