#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;
// }
//}
}