gpt4 book ai didi

c# - ListView模板MvvMCross中绑定(bind)按钮点击

转载 作者:太空狗 更新时间:2023-10-29 16:40:50 24 4
gpt4 key购买 nike

我有一个带有包含按钮的模板的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com