問題
當想在 ListView 的每筆紀錄上,綁定一個手勢操作命令,或者按鈕命令;您把要綁定的命令寫在頁面 ViewModel 中,可是,卻發現到當進行 ListView 每筆紀錄上的操作,這些 ICommand 都不會被執行,該如何解決此一問題呢?
解答
這樣的問題也是有兩個以上的解法可以來運用,不過,我通常都是使用這樣的作法。
首先,使用 x:Name 設定頁面的物件名稱,例如 x:Name="ThisPage"
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
prism:ViewModelLocator.AutowireViewModel="True"
x:Class="XFListView.Views.PullToRefreshPage"
x:Name="ThisPage"
Title="下拉更新" >
接著,在綁定命令的時候,使用 x:Reference 參考到頁面的 BindingContext 物件下的 ICommand 物件。
另外,想要讓 ICommand 取得您點選的 ListView 紀錄項目,可以使用
CommandParameter="{Binding}"
,將這筆紀錄回傳到 ICommand 命令內。 <BoxView
BackgroundColor="White" >
<BoxView.GestureRecognizers>
<TapGestureRecognizer Command="{Binding Path=BindingContext.點擊Command, Source={x:Reference ThisPage}}" CommandParameter="{Binding}" />
</BoxView.GestureRecognizers>
</BoxView>