Главная страница сведений с использованием MVVM

#xamarin.forms

#xamarin.формы

Вопрос:

 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 в viewmodel?

Комментарии:

1. привяжите его к команде в XAML

2. но мне нужен MainPageView для установки деталей и т. Д

3. Я не уверен, какое это имеет отношение к тому предложению, которое я сделал

Ответ №1:

как я могу создать эту функцию onitemselected в viewmodel?

Загрузите исходный файл по ссылке ниже. https://docs.microsoft.com/en-us/samples/xamarin/xamarin-forms-samples/navigation-masterdetailpage /

Я вношу некоторые изменения в исходный файл. Используйте команду для привязки listview к событию ItemSelected.

Установите пакет на NuGet.

Xamarin.Forms.BehaviorsPack : https://github.com/nuitsjp/Xamarin .Формы.BehaviorsPack

MasterPage.xaml

   <ListView.Behaviors>
            <behaviorsPack:SelectedItemBehavior Command="{Binding SelectedItemCommand}" />
        </ListView.Behaviors>
 

MainPage.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;
    //    }
    //}
}