MVVMCross获取MvxListView中的当前项

时间:2014-11-05 03:14:14

标签: android binding xamarin mvvmcross alertdialog

我会显示一个帖子列表,如果我点击帖子中的编辑按钮,则会弹出一个警告对话框来编辑帖子。

当我点击列表视图中的按钮时,我尝试绑定当前项目,但我不知道如何访问它。

这是我的代码:

视图模型

private Post _theCurrentPost;

public Post TheCurrentPost
{
    get { return _theCurrentPost; }
    set
    {
      _theCurrentPost = value;
      RaisePropertyChanged(() => TheCurrentPost);
    }
}
private MvxCommand _openEditDialog;
public ICommand OpenEditDialog
{
   get
   {
     _openShareDialog = _openShareDialog ?? new MvxCommand(LoadCurrentSharedPost);
     return _openShareDialog;
   }
}
private void LoadCurrentSharedPost(Post cur)
{
   TheSharedPost = cur;
}

Main.xmla

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res/Project"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/content_frame">
    <Mvx.MvxListView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/ListView"
        local:MvxBind="ItemsSource PostsList; ItemClick ShowDetails"
        local:MvxItemTemplate="@layout/posttemplate" />
</LinearLayout>

PostTemplate.xmla

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res/Project"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingBottom="5dp"
    android:paddingLeft="5dp"
    android:paddingRight="5dp">
    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/fond_post"
        android:paddingTop="10dp">
        <TextView
            android:id="@+id/Title"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            local:MvxBind="Text Title"/>
        <TextView
            android:id="@+id/Text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/Title"
            android:layout_alignParentLeft="true"
            local:MvxBind="Text Content"/>
        <Button
            android:id="@+id/Edit"
            android:layout_width="50dp"
            android:layout_height="50dp"
            local:MvxBind="Click OpenEditDialog"
            android:background="@drawable/edit_button" />
    </RelativeLayout>
</LinearLayout>

有人知道如何在绑定中发送当前项吗? 我可以从ViewModel启动一个警告对话框,或者我必须在后面的代码中创建一个onclick方法。

感谢。

1 个答案:

答案 0 :(得分:1)

要将ListItem作为参数发送,您必须使用&#34;。&#34;至于绑定按钮问题,这里是同一主题Using MvxCommand With CommandParameter binding的另一篇文章,根据它你只需添加CommandParameter,最后它看起来像:

<Button
    android:id="@+id/Edit"
    android:layout_width="50dp"
    android:layout_height="50dp"
    local:MvxBind="Click OpenEditDialog, CommandParameter=."
    android:background="@drawable/edit_button" />

是的,您可以从ViewModel启动警报对话框。如果您打算使用MvvmCross创建其他项目,我建议您为包含此服务的应用程序创建一个插件,如果您不了解插件,可以在此处查看http://slodge.blogspot.fr/2012/10/build-new-plugin-for-mvvmcrosss.html或在线查找。至于代码,它看起来像这样:

//This goes in core
public interface IAlertService
{
    void CreateAlert(string title, string messagem, etc...);
}

//This goes in droid
public class AlertService : IAlertService
{
    public void CreateAlert(string title, string messagem, etc...)
    {
          //Android code for creating AlertDialog
    }
}