今天在做列表显示的时候遇到一个问题,就是在ListView中如何才能让一个button的按钮工作并且包含参数呢?

其实有点类似于rep里的控件无法起获取一样。在Xamarin中,当你button绑定事件并不包含在listview的数据源中,那么这个按钮的事件便是无效的。

那么该怎么解决呢?找了一下午终于找到了解决方案

xaml:

<AbsoluteLayout IsVisible="True" HorizontalOptions="EndAndExpand">
<renderers:CiCoButton x:Name="ButtonName" BorderRadius="2" BackgroundColor="{StaticResource color}" HeightRequest="36" WidthRequest="36"
AbsoluteLayout.LayoutFlags="PositionProportional" AbsoluteLayout.LayoutBounds=".5,.5,-1,-1" TextColor="White" Command="{Binding Path=BindingContext.functionName, Source={x:Reference Name=ListviewName}}"
CommandParameter="{Binding Id}" />
<Image Source="ic_add_white" AbsoluteLayout.LayoutFlags="PositionProportional" AbsoluteLayout.LayoutBounds=".5,.5,-1,-1"/>
</AbsoluteLayout>

问题的关键在于,Button怎么存数据和如何找到ViewModel中的Command方法

在网上找到这么一种绑定的写法“

{Binding Path=BindingContext.functionName, Source={x:Reference Name=ListviewName}}

Path 指的是你的方法名,BindingContext相当于你的上下文,然后用它点出来你的ViewModel中的方法名,后面则是要把数据绑定到哪里,那么,Name,理所应当就是你所在listview中的名字了

ViewModel:

 private ICommand _backCommand;

  public ICommand BackCommand
{
get
{
return _backCommand ?? (_backCommand = new Command<string>(async (id) => {await BackPage(id);}));
}
} private async Task BackPage(string id)
{
var page = Navigation.NavigationStack.FirstOrDefault(p => p is OutPage);
var vm = page.BindingContext as OutViewModel;
if (vm != null)
{
// 你想要做的事情
}
else
{
"Can't find ".ToToast();
}
await Navigation.PopAsync(true);
}

  那么,Viewmodel中的command方法就要这样写了,new Command<string>(async (id) => {await BackExamStaffPage(id);} 这里对应着page中Button的CommandParamete

Navigation.NavigationStack.FirstOrDefault(p => p is OutPage);从所有打开的页面中,找到你想要返回的上一个页面(当然如果你不需要参数的话直接Pop就好了)

page.BindingContext as OutViewModel; 利用BindingContext转换为你需要的ViewModel,那么,再接下来,你想干嘛都可以楼

Xamarin.Forms listview中的button按钮,实现带着参数返回上一级页面的更多相关文章

  1. Xamarin.Forms ListView点击按钮刷新最新数据

    最近在研究Xamarin的东西,做到ListView遇到了一些瓶颈,像在数据庞大的情况下,该怎么针对ListView中的数据分组呢? 基于能力有限的问题,暂时写了一个只可以实现功能的临时解决方案,毕竟 ...

  2. Android处理ListView中的Item中的Button按钮不能点击的问题

    问题描述:ListView列表中的Button按钮按钮不能点击 解决办法:在ListView中的Item项的布局文件中加上:android:descendantFocusability="b ...

  3. 如何在MFC界面开发中响应Button按钮的Down和Up事件

    通过尝试有两种方案可以解决这个问题,第一种方案是通过PreTranslateMessage函数在调度消息之前对消息类型进行筛选,第二种方案是重载CButton类,在重载后的类CForTestButto ...

  4. android中在java代码中设置Button按钮的背景颜色

    android中在java代码中设置Button按钮的背景颜色 1.设置背景图片,图片来源于drawable: flightInfoPanel.setBackgroundDrawable(getRes ...

  5. 在datagridview中添加button按钮

    .Net的DataGridView控件中,提供了一种列的类型,叫 DataGridViewButtonColumn ,这种列类型是展示为一个 按钮,可以给button赋予相应的text,并且,此but ...

  6. 菜鸟的Xamarin.Forms前行之路——实现按钮的字体图标(可扩展)

    在实际的APP中,带有图标的按钮用到地方还是蛮多的,字体图标往往能更快更生动的传达信息,并且相对于背景图片,字体图标也有着绝对的优势,所以实现按钮的字体图标是值得尝试的. 实现方法:各平台自定义渲染按 ...

  7. listView中的button控件获取item的索引

    在listview中的listitem设置事件响应,如果listitem中有button控件,这时候listitem就不会捕获到点击事件,而默认的是listitem中的button会捕获点击事件.那么 ...

  8. [Android学习笔记]ListView中含有Button导致无法响应onItemClick回调的解决办法

    转自:http://www.cnblogs.com/eyu8874521/archive/2012/10/17/2727882.html 问题描述: 当ListView的Item中的控件只是一些展示类 ...

  9. form中的button按钮在IE11中自动提交表单问题导致弹出框关闭之后表单被重置

    最近几天,测试系统,遇到一个兼容性问题,form中有一个button按钮,没有指定type类型,点击按钮弹出框选择值之后回填给form上的一个单行文本框,在IE6.IE7.IE8.IE9.IE10中测 ...

随机推荐

  1. yii2.0场景的使用

  2. Node.js 学习笔记

    时间:2016-07-07 提前安装好linux CentOs环境,以及相关工具(git,wget,vim……) 1.安装: 目前打算在CentOs上进行操作,网上有教程是旧的地址,这个是搬家后的新地 ...

  3. .NET 串口通信中断接收,包含0X1A(作为EOF)

    .NET串口通信中将`0X1A`当做EOF处理,.NET接收到EOF会触发一次接收中断,此时事件形参`SerialDataReceivedEventArgs`值为枚举 `Eof`,其他为`Chars` ...

  4. Python之路-python(css布局、JavaScript)

    CSS布局 JavaScript css布局: 后台管理界面一:(左右标签都有下来菜单) 利用position: absolute;让某个标签固定在具体位置,然后使用overflow: auto;属性 ...

  5. 改变this指针的apply,call,bind的区别

    apply.call 在 javascript 中,call 和 apply 都是为了改变某个函数运行时的上下文(context)而存在的,换句话说,就是为了改变函数体内部 this 的指向. Jav ...

  6. 简化C语言文法

    程序 → 外部声明|程序 外部声明 外部声明 → 定义函数|定义 函数定义 → 类型标识符 声明部分语句 类型标识符 → 空类型|字符型|整型|浮点型 声明部分语句 → 指针 直接声明|直接声明 指针 ...

  7. Windows XP 新增API函数列表

    SetFileShortNameConvertFiberTothreadCreateFiberExDuplicateEncryptionInfoFileEnumGeoInfoProcEnumSyste ...

  8. 19.在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用 header 函数,其语句为(?)写出http常见的状态码和含义,至少5个.[完善题目]

    状态401代表未被授权,header("Location:www.xxx.php"); 100-199 用于指定客户端应相应的某些动作. 200-299 用于表示请求成功. 300 ...

  9. java 支付宝 第三方即时到账支付 接口

    alipay 的几个内核功能文件:=================================================================================== ...

  10. MXNet学习~第一个例子~跑MNIST

    反正基本上是给自己看的,直接贴写过注释后的代码,可能有的地方理解不对,你多担待,看到了也提出来(基本上对未来的自己说的),三层跑到了97%,毕竟是第一个例子,主要就是用来理解MXNet怎么使用. #导 ...