绑定按钮单击ListView模板MvvMCross
我有一个listview,其中包含一个包含按钮的模板。 单击按钮时,我想要触发事件并返回listview行的值,因此我可以使用它将其添加到数据库中。 我的问题是,我不知道如何将我的buttonevent绑定到itemtemplate。 我尝试了一些方法但到目前为止没有成功。
我的清单视图:
我的ItemTemplate:
我的ViewModel:
public class ListPresentationViewModel: MvxViewModel { private readonly ISQLService _sqlSvc; public ListPresentationViewModel (ISQLService sqlService) { _sqlSvc = sqlService; MenuCollection = _sqlSvc.MenuItemGetAll (); } private List _menuCollection = new List (); public List 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 } }
我在模板和列表视图上的按钮上放置了本地:MvxBind =“Click OrderBtnClick”。 当我从itemtemplate中删除按钮时,ItemClick似乎工作,但这不是我正在寻找的。 我希望按钮能够触发事件。 谁能指出我正确的方向?
更新 :
我已经尝试了斯图尔特小屋在这里发布的第二个建议。 这是我的包装类 :
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; } } }
我的ViewModel:
public class ListPresentationViewModel: MvxViewModel { private readonly ISQLService _sqlSvc; public ListPresentationViewModel (ISQLService sqlService) { _sqlSvc = sqlService; MenuCollection = WrapConverter.ConvertToWrapperClass(_sqlSvc.MenuItemGetAll (), this); } private List _menuCollection = new List (); public List MenuCollection { get{ return _menuCollection;} set { _menuCollection = value; RaisePropertyChanged (() => MenuCollection); } } private IMvxCommand _orderBtnClick; public IMvxCommand OrderBtnClick{ get{ _orderBtnClick = _orderBtnClick ?? new MvxCommand (btnClick); return _orderBtnClick; } } public void btnClick(MenuItemWrap item) { MenuCollection.Clear (); } }
这是我的模板 :
我的listview完美无缺。 所有属性都正确绑定,我可以看到名称,短描述和图像。 什么不起作用是按钮单击。 在我的应用程序输出中我得到一个错误说: MvxBind:警告:76.06无法绑定:未找到源属性源Cirrious.MvvmCross.Binding.Parse.PropertyPath.PropertyTokens.MvxPropertyNamePropertyToken在MenuItemWrap上
我尝试了一些方法来解决它,但没有成功。 我会提到我没有在MvvMCross程序集中找到RelayCommand类,所以我将代码从此处复制粘贴到我的项目中。
我找到了解决方案。 问题是点击绑定。 您应该只引用包装器类中的操作,而不是两者。 这是我的wrapperclass和listview itemtemplate。
ItemTemplate中:
WrapperClass:
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; } } }
我的ViewModel:
上述就是C#学习教程:绑定按钮单击ListView模板MvvMCross分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
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 _menuCollection = new List (); public List MenuCollection { get{ return _menuCollection;} set { _menuCollection = value; RaisePropertyChanged (() => MenuCollection); } } private IMvxCommand _orderBtnClick; public IMvxCommand OrderBtnClick { get { _orderBtnClick = _orderBtnClick ?? new MvxCommand
- vNext中的
MvxCommand
在v3中缩短为MvxCommand
– 只是为了节省输入。 - 你的最后一个问题似乎是你绑定了
Click btnClick.OrderBtnClick
– 但是你的MenuItemWrap
类没有btnClick
属性 – 所以你真的要绑定Click Click
?
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/958240.html