xamarin.forms - 使用 MVVM 的主详细信息页面
问题描述
public MainPageView()
{
InitializeComponent();
MasterPage.NavMenuMListView.ItemSelected += OnItemSelected;
}
void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
MasterNavigationItem item = (MasterNavigationItem)e.SelectedItem;
if (item != null)
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.Target));
MasterPage.NavMenuMListView.SelectedItem = null;
IsPresented = false;
}
}
我有一个主详细信息页面(这是背后的代码),我想尊重 mvvm 约定。文档中使用的这种方法使用视图内的模型。如何在视图模型中创建 onitemselected 函数?
解决方案
如何在视图模型中创建 onitemselected 函数?
从下面的链接下载源文件。https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/navigation-masterdetailpage/
我对源文件进行了一些更改。使用该命令将列表视图与 ItemSelected 事件绑定。
在 NuGet 上安装包。
Xamarin.Forms.BehaviorsPack
:https ://github.com/nuitsjp/Xamarin.Forms.BehaviorsPack
MasterPage.xaml
<ListView.Behaviors>
<behaviorsPack:SelectedItemBehavior Command="{Binding SelectedItemCommand}" />
</ListView.Behaviors>
主页.cs
public partial class MainPage : MasterDetailPage
{
public ICommand SelectedItemCommand { get; set; }
public MainPage()
{
InitializeComponent();
SelectedItemCommand = new Command(execute: () =>
{
var item = masterPage.listView.SelectedItem as MasterPageItem;
if (item != null)
{
Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
masterPage.listView.SelectedItem = null;
IsPresented = false;
}
});
masterPage.BindingContext = this;
//masterPage.listView.ItemSelected += OnItemSelected;
//if (Device.RuntimePlatform == Device.UWP)
//{
// MasterBehavior = MasterBehavior.Popover;
//}
}
//void OnItemSelected(object sender, SelectedItemChangedEventArgs e)
//{
// var item = e.SelectedItem as MasterPageItem;
// if (item != null)
// {
// Detail = new NavigationPage((Page)Activator.CreateInstance(item.TargetType));
// masterPage.listView.SelectedItem = null;
// IsPresented = false;
// }
//}
}
推荐阅读
- emacs - 使用 EDIFF 时如何处理这种合并冲突情况,我们需要来自变体 A 和 B 的部分冲突
- python - 用不同的相机校准相机
- process - 内核尺度的 GPR 数
- ios - SwiftUI Textfield 自动为日期输入添加连字符
- android-studio - 自 AndroidStudio 4.2 以来的错误启动应用程序
- typescript - 打字稿编译器没有抱怨缺少开关盒
- visual-studio-code - Visual Studio Code - 禁用不同类型项目的特定扩展列表
- python - 从文件夹导入图像,并对其进行排序。市场 1501
- javascript - javascript 找不到 json 对象值
- python - 语音识别模块在 python 中不起作用