簡體   English   中英

Xamarin ListView項目選定的MVVM

[英]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中,如何獲取值。

我感謝您的幫助。

您在此處有幾個選項,但最簡單的方法可能是將ListViewSelectedItem綁定到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));
}

我已經使用了INotifyPropertyChangedCallerMemberNameAttribute INotifyPropertyChanged將通知您的視圖(或更確切地說,您的BindableProperty )您的視圖模型中的屬性已更改,並為視圖提供了更新內容的機會。 CallerMemberNameAttribute是語法糖,可讓您省略調用OnPropertyChangedFrom的屬性的名稱。 基本上跟你打過電話一樣

OnPropertyChanged(nameof(SelectedPerson));

在您的視圖中,您現在可以將ListView綁定到SelectedPerson

<ListView ... SelectedItem="{Binding SelectedPerson}">...</ListView>

並在PathToDetailView使用SelectedPerson

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM