长时间的监听者,首次调用者。我对此很陌生,我认为这是一个非常简单的问题。
我正在构建Xamarin.Forms应用程序,并且具有许多静态菜单。问题是,最佳实践是在菜单的“ CodeBehind”中使用“ OnClick”事件还是创建ViewModel并将其绑定回导航命令?
对于其他所有内容,我一直将代码保留为空(除非有绑定上下文),这使我很烦恼,因为菜单在那里。两种方法都有好处吗?
OnClicked: .xaml
<Button Text="Fridge and Freezer" WidthRequest="300" BackgroundColor="DeepSkyBlue" Clicked="onClickedEvent_FridgeFreezer"/>
.cs(在代码背后)
async void onClickedEvent_FridgeFreezer(object sender, EventArgs args)
{
await Navigation.PushAsync(new FridgeFreezer());
}
OR
绑定: .xaml
<Button Text="Fridge and Freezer" WidthRequest="300" BackgroundColor="DeepSkyBlue" Command="{Binding GoToFridgeFreezer}"/>
.cs(在ViewModel中)
public ICommand GoToFridgeFreezer{ get; private set; }
async void GoToFridgeFreezer()
{
wait Navigation.PushAsync(new FridgeFreezer());
}
答案 0 :(得分:3)
MVVM的全部重点是使其得以实现,因此您无需实际启动即可测试尽可能多的应用程序。
使用自动UI测试,现在可以验证如果由View触发,导航是否正确进行,但这需要启动应用程序并实际运行其整个控制流程。因此,尽管有可能,但仍然很尴尬和缓慢。可能还有其他更好的框架,但是我发现Xamarin.Forms页面在单元测试中不能很好地发挥作用。根据我的经验,使用基于视图的导航意味着该应用程序的可测试性会自动降低。
但是,如果您将导航代码编码为在ViewModels中进行,则可以在不启动应用程序的情况下对其进行测试。您在测试中创建ViewModel的实例,将其发送给模拟的可能会导致导航的输入,并观察其尝试导航到的位置。这比测试基于视图的导航要简单得多,而且速度非常快。 我研究过的大多数MVVM应用程序(WPF,Xamarin)在ViewModel中都有导航逻辑,这意味着我要注入一个接口来照顾触发导航的问题。
答案 1 :(得分:1)
嗯,最佳实践建议在ViewModel中进行所有操作,并尽可能简化代码隐藏。
答案 2 :(得分:0)
感谢大家的评论和支持。
当我深入研究它时,我发现我需要在某些菜单选项中内置Dynamism和Logic,因此毫无疑问地转移到ViewModel来处理它。
如果其他人正在阅读本文,那么我建议您沿ViewModel路线走,如果有的话可以让您灵活地进行更改而无需进行大量工作。
特别感谢user11639555,我才刚刚开始尝试测试,那是非常宝贵的:)!!!
祝大家好运:)