我对 Xamarin.Form 非常陌生,非常感谢您的帮助。
我正在为我当前的项目使用 MVVM 模式。我的 ListView 中填充了人员,我想在 ListView 中选择项目并显示详细信息。不幸的是,我找不到任何解决此问题的示例。
这是我的可绑定(bind)类:
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 如何获取值(value)。
我感谢您的帮助。
最佳答案
这里有几个选项,但最简单的可能是绑定(bind) SelectedItem
您的ListView
到您的 View 模型中的属性
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
将通知您的 View (或者更确切地说是您的 BindableProperty
),您的 View 模型中的属性已更改,并使 View 有机会更新内容。 CallerMemberNameAttribute
是语法糖,它可以让你省略你正在调用的属性的名称 OnPropertyChangedFrom
.基本上和你打电话一样OnPropertyChanged(nameof(SelectedPerson));
在您看来,您现在可以绑定(bind)
ListView
至SelectedPerson
<ListView ... SelectedItem="{Binding SelectedPerson}">...</ListView>
并使用
SelectedPerson
在 PathToDetailView
.
关于listview - Xamarin ListView itemSelected MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46475894/