問題
解答
這個時候,您可以使用 Xamarin.Forms 內建的 Behavior 功能,每個 Xamarin.Forms 的控制項,都可以使用 Behaviors 屬性,可以用來定義相關擴充行為;不過,要綁定 ListView 的點擊某筆紀錄的事件,這個時候,我們需要使用一個 NuGet 套件:
Behaviors.Forms
。
在底下的 XAML 宣告中,宣告了一個額外命名空間
xmlns:behaviors="clr-namespace:Behaviors;assembly=Behaviors"
,透過 behaviors 這個命名空間,可以取得與使用這個 Behavior NuGet 套件的相關擴充行為功能;所以,您可以在底下看到宣告了 <ListView.Behaviors>
屬性,使用了 InvokeCommandAction
這個方法,綁定了當 ListView 控制項有這個 ItemTapped
事件發生的時候,就會去執行這個 ViewModel 內的 MyDataClickedCommand
命令。<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"
xmlns:behaviors="clr-namespace:Behaviors;assembly=Behaviors"
x:Class="XFListView.Views.ItemClickPage"
Title="ListView 點選與取消選取">
<StackLayout>
<ListView x:Name="listview"
ItemsSource="{Binding MyData}"
SelectedItem="{Binding MyDataSelected, Mode=TwoWay}"
Margin="20,0"
IsPullToRefreshEnabled="True"
RefreshCommand="{Binding 更新資料Command}"
IsRefreshing="{Binding IsBusy, Mode=TwoWay}"
>
<ListView.Behaviors>
<behaviors:EventHandlerBehavior EventName="ItemTapped">
<behaviors:InvokeCommandAction Command="{Binding MyDataClickedCommand}" />
</behaviors:EventHandlerBehavior>
</ListView.Behaviors>
ItemSelected
這個事件,可是,若採用 MVVM 價購方式開發,不想要使用 Code Behind 的方式來訂閱這個事件,而是想要綁定 ICommand 命令,這個時候,該如何處理呢?