Xamarin ListView itemSelected MVVM
Posted
技术标签:
【中文标题】Xamarin ListView itemSelected MVVM【英文标题】: 【发布时间】:2018-03-10 14:17:47 【问题描述】:我是 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 如何获取值。
感谢您的帮助。
【问题讨论】:
【参考方案1】:这里有几个选项,但最简单的可能是将ListView
的SelectedItem
绑定到视图模型中的属性
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
。
【讨论】:
以上是关于Xamarin ListView itemSelected MVVM的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms JSON 对象到 Listview
WillEnterForeground 上的 Xamarin 表单更新 ListView