[英]Xamarin ListView itemSelected MVVM
我是Xamarin.Form的新手,非常感謝您的幫助。
我正在為當前項目使用MVVM模式。 我有很多人,我想在列表視圖中選擇項目並顯示詳細信息。 不幸的是,我找不到解決此問題的任何示例。
這是我的可綁定類:
public static readonly BindableProperty CommandProperty =
BindableProperty.Create(
propertyName: "Command",
returnType: typeof(ICommand),
declaringType: typeof(ListViewItemSelected));
public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}
protected override void OnAttachedTo(ListView bindable)
{
base.OnAttachedTo(bindable);
bindable.ItemSelected += BindableOnItemSelected;
bindable.BindingContextChanged += BindableOnBindingContextChanged;
}
private void BindableOnBindingContextChanged(object sender, EventArgs e)
{
var lv = sender as ListView;
BindingContext = lv?.BindingContext;
}
private void BindableOnItemSelected(object sender, SelectedItemChangedEventArgs e)
{
if (Command == null)
return;
Command.Execute(null);
}
我不確定ViewModel的下一步。 我創建了ICommand屬性來執行該方法
public ICommand DetailView { get; set; }
在我的構造函數中,我添加了
DetailView = new Command(PathToDetailView);
我創建了這種方法
void PathToDetailView()
{
//Which I do not know what should go here to redirect to DetailsPage for each item.
}
我有點卡在DetailViewPage中,如何獲取值。
我感謝您的幫助。
您在此處有幾個選項,但最簡單的方法可能是將ListView
的SelectedItem
綁定到viewmodel中的屬性
public Person SelectedPerson
{
get => _selectedPerson;
set
{
if(_selectedPerson == value)
{
return;
}
_selectedPerson = value;
OnPropertyChanged();
}
}
protected void OnPropertyChanged([CallerMemberName] propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
我已經使用了INotifyPropertyChanged和CallerMemberNameAttribute 。 INotifyPropertyChanged
將通知您的視圖(或更確切地說,您的BindableProperty
)您的視圖模型中的屬性已更改,並為視圖提供了更新內容的機會。 CallerMemberNameAttribute
是語法糖,可讓您省略調用OnPropertyChangedFrom
的屬性的名稱。 基本上跟你打過電話一樣
OnPropertyChanged(nameof(SelectedPerson));
在您的視圖中,您現在可以將ListView
綁定到SelectedPerson
<ListView ... SelectedItem="{Binding SelectedPerson}">...</ListView>
並在PathToDetailView
使用SelectedPerson
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.