首页 > 解决方案 > 使用 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 函数?

标签: xamarin.forms

解决方案


如何在视图模型中创建 onitemselected 函数?

从下面的链接下载源文件。https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/navigation-masterdetailpage/

我对源文件进行了一些更改。使用该命令将列表视图与 ItemSelected 事件绑定。

在 NuGet 上安装包。

Xamarin.Forms.BehaviorsPackhttps ://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;
    //    }
    //}
}

推荐阅读