- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个带有包含按钮的模板的 ListView 。单击按钮时,我希望触发一个事件并返回 ListView 行的值,这样我就可以使用它将它添加到数据库中。我的问题是,我不知道如何将我的按钮事件绑定(bind)到项目模板。我尝试了几种方法,但到目前为止没有成功。
我的 ListView :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Mvx.MvxListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:divider="#aeaeae"
android:dividerHeight="1px"
local:MvxBind="ItemsSource MenuCollection; ItemClick OrderBtnClick"
local:MvxItemTemplate="@layout/listitem_menuitem" />
</LinearLayout>
我的项目模板:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Mvx.MvxImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
local:MvxBind="ImageUrl ImageUrl" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:textSize="40dp"
local:MvxBind="Text Name" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:textSize="20dp"
local:MvxBind="Text ShortDescription" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:minWidth="25px"
android:minHeight="25px">
<Button
android:layout_width="wrap_content"
android:layout_height="70dip"
android:layout_alignParentRight="true"
android:layout_marginTop="20dip"
android:layout_marginRight="20dip"
android:layout_gravity="right|center_vertical"
android:text="Bestel"
android:id="@+id/button1" />
</LinearLayout>
</LinearLayout>
我的 View 模型:
public class ListPresentationViewModel: MvxViewModel
{
private readonly ISQLService _sqlSvc;
public ListPresentationViewModel (ISQLService sqlService)
{
_sqlSvc = sqlService;
MenuCollection = _sqlSvc.MenuItemGetAll ();
}
private List<MenuItem> _menuCollection = new List<MenuItem> ();
public List<MenuItem> MenuCollection {
get{ return _menuCollection;}
set {
_menuCollection = value;
RaisePropertyChanged (() => MenuCollection);
}
}
private IMvxCommand _orderBtnClick;
public IMvxCommand OrderBtnClick{
get{
_orderBtnClick = _orderBtnClick ?? new MvxCommand(btnClick);
return _orderBtnClick;}
}
private void btnClick()
{
//Do Something
}
}
我将 local:MvxBind="Click OrderBtnClick"放置在模板中的按钮和 ListView 中。当我从项目模板中删除按钮时,ItemClick 似乎可以工作,但这不是我要找的。我希望按钮触发事件。谁能指出我正确的方向?
更新:
我已经尝试了 stuart lodge 发布的第二个建议 here .这是我的包装类:
public class MenuItemWrap
{
MenuItem _mnuItem;
ListPresentationViewModel _parent;
public MenuItemWrap ()
{
}
public MenuItemWrap (MenuItem item, ListPresentationViewModel parent)
{
_mnuItem = item;
_parent = parent;
}
public IMvxCommand Click {
get {
return new MvxRelayCommand (() => _parent.btnClick(WrapConverter.ConvertToWrapMenuItem(_mnuItem, _parent)));
}
}
public MenuItem Item{ get { return _mnuItem; } }
}
我的 View 模型:
public class ListPresentationViewModel: MvxViewModel
{
private readonly ISQLService _sqlSvc;
public ListPresentationViewModel (ISQLService sqlService)
{
_sqlSvc = sqlService;
MenuCollection = WrapConverter.ConvertToWrapperClass(_sqlSvc.MenuItemGetAll (), this);
}
private List<MenuItemWrap> _menuCollection = new List<MenuItemWrap> ();
public List<MenuItemWrap> MenuCollection {
get{ return _menuCollection;}
set {
_menuCollection = value;
RaisePropertyChanged (() => MenuCollection);
}
}
private IMvxCommand _orderBtnClick;
public IMvxCommand OrderBtnClick{
get{
_orderBtnClick = _orderBtnClick ?? new MvxCommand<MenuItemWrap> (btnClick);
return _orderBtnClick;
}
}
public void btnClick(MenuItemWrap item)
{
MenuCollection.Clear ();
}
}
这是我的模板:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Mvx.MvxImageView
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp"
local:MvxBind="ImageUrl Item.ImageUrl" />
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:textSize="40dp"
local:MvxBind="Text Item.Name" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:textSize="20dp"
local:MvxBind="Text Item.ShortDescription" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:minWidth="25px"
android:minHeight="25px">
<Button
android:layout_width="wrap_content"
android:layout_height="70dip"
android:layout_alignParentRight="true"
android:layout_marginTop="20dip"
android:layout_marginRight="20dip"
android:layout_gravity="right|center_vertical"
android:text="Bestel"
local:MvxBind="Click btnClick.OrderBtnClick"
android:id="@+id/button1" />
</LinearLayout>
</LinearLayout>
我的 ListView 完美运行。所有属性都正确绑定(bind),我可以看到名称、简短描述和图像。不起作用的是 Button Click。在我的应用程序输出中,我收到一条错误消息:MvxBind:Warning: 76.06 Unable to bind: source property source not found Cirrious.MvvmCross.Binding.Parse.PropertyPath.PropertyTokens.MvxPropertyNamePropertyToken on MenuItemWrap
我尝试了几种方法来修复它,但都没有成功。我会提到我没有在 MvvMCross 程序集中找到 RelayCommand 类,所以我从 here 复制粘贴了代码进入我的项目。
最佳答案
我找到了解决方案。问题是点击绑定(bind)。您应该只引用包装类中的操作,而不是同时引用两者。这是我的包装器类和 ListView 项模板。
项目模板:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:minWidth="25px"
android:minHeight="25px">
<Button
android:layout_width="wrap_content"
android:layout_height="70dip"
android:layout_alignParentRight="true"
android:layout_marginTop="20dip"
android:layout_marginRight="20dip"
android:layout_gravity="right|center_vertical"
android:text="Bestel"
local:MvxBind="Click OrderClick" />
</LinearLayout>
包装类:
public class MenuItemWrap
{
MenuItem _mnuItem;
ListPresentationViewModel _parent;
public MenuItemWrap (MenuItem item, ListPresentationViewModel parent)
{
_mnuItem = item;
_parent = parent;
}
public IMvxCommand OrderClick {
get {
return new MvxCommand (() => _parent.btnClick (_mnuItem));
}
}
public MenuItem Item{ get { return _mnuItem; } }
}
我的 View 模型:
public class ListPresentationViewModel: MvxViewModel
{
private readonly ISQLService _sqlSvc;
public ListPresentationViewModel (ISQLService sqlService)
{
_sqlSvc = sqlService;
MenuCollection = WrapConverter.ConvertToWrapperClass (_sqlSvc.MenuItemGetAll(), this);
}
private int _catId;
public int CategorieId {
get{ return _catId;}
set{
_catId = value;
ChangeMenuCollection ();
}
}
private void ChangeMenuCollection()
{
MenuCollection = WrapConverter.ConvertToWrapperClass (_sqlSvc.MenuItemByCategorie (_catId), this);
}
private List<MenuItemWrap> _menuCollection = new List<MenuItemWrap> ();
public List<MenuItemWrap> MenuCollection {
get{ return _menuCollection;}
set {
_menuCollection = value;
RaisePropertyChanged (() => MenuCollection);
}
}
private IMvxCommand _orderBtnClick;
public IMvxCommand OrderBtnClick {
get {
_orderBtnClick = _orderBtnClick ?? new MvxCommand<MenuItem> (btnClick);
return _orderBtnClick;
}
}
public void btnClick (MenuItem item)
{
//Do Something
}
}
关于c# - ListView模板MvvMCross中绑定(bind)按钮点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18075928/
我在MvvmCross应用程序中使用了Messenger插件,并且注意到它有时会清除我的订阅(“一个或多个监听器失败-已清除清除”)。这在我的应用程序中导致错误。默认情况下,我对订阅使用弱引用,并且我
我正在开发 MVVMCross v3,我想创建自己的插件,我遵循了本教程(适用于 vNext) http://slodge.blogspot.fr/2012/10/build-new-plugin-f
我在 View 模型中有一些来自 Init 的异步调用。问题是有时异步调用在 OnCreate 之前返回,并且 UI 中的属性没有更新。 当我们必须初始化异步数据时,是否有适合这种情况的异步/等待模型
我正在尝试在我的应用程序之一中使用 MvvmCross v3,该应用程序由事件、内容提供者和广播接收器组成。但是,我并没有完全成功。 该应用程序由一个包含逻辑、模型和 View 模型的核心 PCL 和
我希望能够在调试 MvvmCross 应用程序时单步执行 MvvmCross 源代码。而且我想保持使 MvvmCross 库保持最新的过程简单。目前,如果不编辑大量 .csproj 文件(由于某些 P
我有一个 WPF MVVM 应用程序,我想重构它以使用 MvvmCross 来支持 Android 实现的 WPF 和 Mono。 我们的应用程序的 View 包括: 始终可见的工具栏 导航栏区域 主
标题说明了一切。根据您的经验,这两个框架之间的主要区别是什么? 我们什么时候应该使用一个而不是另一个? 预期用途:跨平台开发(Windows 8、iOS、Android、WindowsRT、Mac)。
我希望用户能够将有关我的应用的反馈发送到某个地址。使用电子邮件插件,这一切都很好,但在电子邮件正文中,我想预先填充有关他们正在运行的应用程序的一些信息。 理想情况下,我想要设备、操作系统、屏幕分辨率、
我正在使用 mvvmcross 开发一个 iOS 项目。 应用程序导航是这样的:首先它从初始屏幕 (1) 开始,然后导航到 (2),一个在 3 个选项之间进行选择的 View ,在 View (3)
我正在尝试使用 Visual Studio Team Services(以前是 Visual Studio Online) 和 VSTS Build Agent< 在 Mac 上构建 Xamarin.
我在 View 模型中有一个枚举属性,如果属性值是特定值,我想使标签可见 States state; public States State { get { return this.state
我正在创建类似于 N=32 - The Truth about ViewModels... starring MvxView on the iPad - N+1 days of MvvmCross 中
在MvvmCross应用程序中,我有一个页面具有经典的聊天行为(类似于WhatsApp):此页面显示了两个用户之间交换的消息的历史记录,最后一条消息位于列表的底部。 我已经在Windows Phone
我正在尝试在基于 Xamarin Android 的布局中创建一个自动完成控件。我正在使用 MVVMCross。 我在片段中创建了以下 AXML 布局。 我更新了我的 View
将 Fody 与 MvvmCross 集成的正确方法是什么?我是否需要任何特殊的管道代码或配置来确保调用 MvxNotifyPropertyChanged 类中正确的 RaisePropertyCha
我要同时为我的应用程序实现两种类型的导航,侧边栏导航和父子导航。 我的应用程序从汉堡(侧边栏)菜单开始。 侧边栏菜单中的第一项应执行导航堆栈的重置并打开主视图。 主视图 Controller 应该启动
这个问答中回答的问题是我们如何使用 mvvmcross 在我们的 UI 项目上显示颜色,当我们有一个带有枚举属性的 ViewModel 时,不需要有 Color 属性,也没有 ValueConvert
将参数从一个 View 模型传递到另一个 View 模型,然后修改它然后将其返回到原始 View 模型的推荐方法是什么? 关于将值传递给 View ,即 ShowViewModel(new{ para
I have one custom object in my ViewModel.I want to bind only one of its member to textview in my dro
我想使用 Mvvmcross 为多个平台制作应用程序。 我对 Mvvmcross 等 PCL 库使用配置文件 104,但此配置文件的目标是 .NET 4.5。我想以 .NET 4.0 为目标,以便在
我是一名优秀的程序员,十分优秀!