gpt4 book ai didi

c# - 如何将 EventArgs 传递给 DelegateCommand?

转载 作者:太空宇宙 更新时间:2023-11-03 19:48:00 25 4
gpt4 key购买 nike

我有一个 Xamarin.Forms 项目。在 Prism 中作为 MVVM 框架。我有一个自定义控件(派生自 CocosSharpView,但这并不重要)。我正在使用参数在该类中引发自定义事件,但无法将此参数传输到 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; }
}

XAML部分:

  <mobile:CustomCocosSharpView>
<behaviors:Interaction.Behaviors>
<behaviors:BehaviorCollection>
<behaviors:EventToCommand EventName="OnTouched"
Command="{Binding OnTouchedCommand}" />
</behaviors:BehaviorCollection>
</behaviors:Interaction.Behaviors>
</mobile:CustomCocosSharpView>

最后是ViewModel:

    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?
}));
}
}

问题:

如何在 DelegateCommand 中获取 CustomEventArgs 参数? 这一定是可能的!但没有任何效果:/

感谢您的帮助!

最佳答案

如果您使用的是 Prism 6.3-pre2,则可以使用内置的 EventToCommand 并使用转换器或路径完全控制传递给 DelegateCommand 的内容。您可以在此处查看文档:http://prismlibrary.readthedocs.io/en/latest/Xamarin-Forms/6-EventToCommandBehavior/#using-the-eventtocommandbehavior

关于c# - 如何将 EventArgs 传递给 DelegateCommand?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42992860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com