gpt4 book ai didi

c# - 菜单的 MVVM 最佳实践

转载 作者:行者123 更新时间:2023-11-30 14:21:21 26 4
gpt4 key购买 nike

长期倾听者,第一次来访者。我对此很陌生,我认为这是一个非常简单的问题。

我正在构建一个 Xamarin.Forms 应用程序并有许多静态菜单。问题是,最佳做法是在菜单的“代码隐藏”中使用“OnClick”事件,还是创建一个 ViewModel 并将它们绑定(bind)回导航命令?

对于其他所有内容,我都将代码保留为空(禁止绑定(bind)上下文),这让我很恼火,因为菜单就在那里。这两种方式有什么好处吗?

点击时:.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());
}

绑定(bind):.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());
}

最佳答案

MVVM 的全部意义在于让您可以尽可能多地测试您的应用程序,而无需实际启动它。

使用自动化 UI 测试,现在可以验证导航是否在 View 触发时正确发生,但这需要启动应用程序并实际运行其整个控制流。所以虽然有可能,但还是相当笨拙和缓慢。可能有其他框架对此效果更好,但我发现 Xamarin.Forms 页面根本不能很好地与单元测试配合使用。根据我的经验,使用基于 View 的导航意味着应用会自动变得更难测试。

但是,如果您将导航编码为在 ViewModel 中发生,则无需启动应用即可对其进行测试。您在测试中创建了一个 ViewModel 实例,向它发送应该引起导航的模拟输入,并观察它尝试导航到的位置。这比测试基于 View 的导航要简单得多,而且速度非常快。我开发过的大多数 MVVM 应用程序(WPF、Xamarin)都在 ViewModel 中具有导航逻辑,我的意思是注入(inject)了一个接口(interface)来负责触发导航。

关于c# - 菜单的 MVVM 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56715250/

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