EP 15: The Button of item in ListView binds Command to ViewModel

Hello, 各位 iT邦帮忙 的粉丝们大家好~~~

本篇是 Re: 从零开始用 Xamarin 技术来复刻过去开发的一个 App: TopStore 系列文的 EP15。

在上篇 EP14 的部分已经有针对在 PeoplePage 当中的 ListView 呈现的联络人的资料,若透过设计其 ViewCell.ContaxtActions 中的 MenuItem 来完成 "删除" 某笔联络人资料的事情。

本篇 EP15 先来进一步的 "讨论",针对在 ListView 当中设计的 ViewCell 里面有放置的辣个 Button,要如何实践它的 "打电话" 功能实作唷。

开始罗~~~


首先,打开 PeoplePage.xaml 并且找到当初在 ListView 其中所设计的 ViewCell 当中 Button 标记。

在 ListView 其中所设计的 ViewCell 当中 Button 标记
(为了方便截图,将其它的 XAML 标记先缩编起来。)

接着要针对这个 Button 设计两个属性,一个叫做 Command;一个叫做 CommandParameter。

并且设计其系结的 Command 到 PeoplePageViewModel 当中所要再新增的 CallTelCommand。
PeoplePageViewModel 当中设计 CallTelCommand
(注意此 Command 的撰写是有引数设计的。)

而这个 CallTelCommand 就透过 Xamarin.Essentials 当中所设计的 PhoneDialer 来执行 Open 方法转跳到拨打电话的部分。
PeoplePageViewModel 当中设计 CallTelCommand

接着针对 Button 标记再撰写 Command 并且指定其 Binding 的 Source 为一个 RelativeSource 的设计处理,而 Binding 的 Path 为 CallTelCommand。
Button 标记当中的 Command 设定

完成之後再继续撰写 CommandParameter 设计其 Binding 的 Source 为一个 RelativeSource 的设计处理,而 Binding 的 Path 为 BindingContext。
Button 标记当中的 CommandParameter 设定

当完成之後,就可以来测试执行看看,其双平台(Android、iOS)的执行结果如何。

Android:
Android : Button 点选後执行 CallTelCommand

iOS:
iOS : Button 点选後执行 CallTelCommand

大概可以看出其效果为直接从 TopStore App 进行转跳,转跳到该平台装置上预设拨打电话的 App,并且把该联络人的 Tel 资讯带入到拨打电话的 App 当中。

完工~~~

请继续往下收看 EP16 罗

哈~~~若是这样本篇就太骗了些。

还是来针对上述完成的功能来理解一下发生了什麽事情。

第一,可能有朋友会想应该对於 Command 的设定应是如此的写法。
Button 的 Command 指定 1

只能说,如果有了解 Binding(系结) 观点的话,在这边对於 Button 标记的 Command 我们是无法直接指定设计在 PeoplePageViewModel 的 CallTelCommand,如果注意一下 Visual Studio 在 XAML 当中的即时提示就会发现。
Button 的 Command 指定 2

由於现在 Button 是设计在 ListView 当中的 ItemTemplate 当中的 DataTemplate 当中的 ViewCell,该 ViewCell 所 Binding(系结) 到的 BindingContext 会是一个 Person 的物件。

因此是无法直接撰写 Button 的 Command 其 Binding 设定为 CallTelCommand 的。

所以在这边的 Binding 是透过 Source 的指定其 RelativeSource 的设计,来取得 PeoplePageViewModel 并且指定其 Path 为 CallTelCommand。

第二,那个 CommandParameter 又是在做什麽?

如果各位有注意到,这个 Button 是需要带 Person 里的 Tel 给 "拨打电话" 的 App,所以在设计 CallTelCommand 的处理上,是有设定一个引数提供带入参数资料的。
PeoplePageViewModel 当中设计 CallTelCommand 有设计引数

那为何又要这样做?

因为 Button 目前的 Command 已经在第一点指定要执行 PeoplePageViewModel 当中的 CallTelCommand,且 Button 的 BindingContext 就是 Person 的物件。

所以这里就透过将其 Binding 的 Source 指定其 RelativeSource 的设计为 Self,就能把该 Person 当参数,把资料传递给 CallTelCommand 所设计的引数设计。

希望透过以上两点补充,能对理解本篇 EP15 对於 Button 实作 "拨打电话" 的 Command 处理,有更进一步的了解唷~~~

好的,就介绍到这边,下篇 EP16 见罗!

骰唷奈奈~~~~


<<:  Day 23 ASP.NET Core Identity 说明

>>:  第 07 天 不断尝试直到成功( leetcode 106 )

Day-11 函式入门

如前文所述,在JavaScript中,除了基本型别一切都是物件。而函式(function)也不例外。...

Day7 用HTML和CSS制作一个表格

在制作表格之前,要先来了解表格的HTML标签 表格必备HTML标签 要制作一个基本的表格,一定会使用...

Day20. 麻痹手表,小五郎叔叔的噩梦 - Sleeping

大家应该都看过名侦探柯南吧,那个智慧过於常人的小学生,东京死神,专长是踢足球跟在夏威夷学开飞机,兴趣...

Day26 - AlertDialog

今天来练习第一个Dialog AlertDialog AlertDialog不仅仅提供使用者显示文字...

[DAY 18] 自动建立回应试算表及改名

我的习惯是把所有的考试记录统整在同一个spreadsheet 里 再用不同的考试名称区分每一次的考试...