Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将EventArgs传递给DelegateCommand?_C#_Xamarin_Mvvm_Xamarin.forms_Prism - Fatal编程技术网

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