C# 单击GridView项时返回ImageView实例
单击GridView项时如何返回ImageView实例 我为ItemClick创建自定义绑定事件:C# 单击GridView项时返回ImageView实例,c#,android,xamarin.android,mvvmcross,C#,Android,Xamarin.android,Mvvmcross,单击GridView项时如何返回ImageView实例 我为ItemClick创建自定义绑定事件: public class ItemClickSquareBinding : MvxBaseAndroidTargetBinding { private readonly GridView _gridView; private IMvxCommand _command; public ItemClickSquareBindin
public class ItemClickSquareBinding
: MvxBaseAndroidTargetBinding
{
private readonly GridView _gridView;
private IMvxCommand _command;
public ItemClickSquareBinding(GridView gridView)
{
_gridView = gridView;
_gridView.ItemClick += GridView_ItemClick;
}
private void GridView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
//----->Get ImageView
}
public override void SetValue(object value)
{
_command = (IMvxCommand)value;
}
protected override void Dispose(bool isDisposing)
{
if (isDisposing)
{
_gridView.ItemClick -= GridView_ItemClick;
}
base.Dispose(isDisposing);
}
public override Type TargetType
{
get { return typeof(IMvxCommand); }
}
public override MvxBindingMode DefaultMode
{
get { return MvxBindingMode.OneWay; }
}
}
我的网格视图:
<cirrious.mvvmcross.binding.android.views.MvxBindableGridView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="4"
android:gravity="center"
android:listSelector="#00000000"
local:MvxItemTemplate="@layout/itemimage"
local:MvxBind="{'ItemsSource':{'Path':'Squares'}, 'ClickItemSquare':{'Path':'ClickCommand'}}" />
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/LeSommet.ZooSnap.UI.Android"
android:layout_width="80dp"
android:layout_height="80dp"
android:padding="5dp"
android:layout_gravity="center"
local:MvxBind="{'ResourcesImagePath':{'Path':'ImagePath'}}"
/>
我的图像视图:
<cirrious.mvvmcross.binding.android.views.MvxBindableGridView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="4"
android:gravity="center"
android:listSelector="#00000000"
local:MvxItemTemplate="@layout/itemimage"
local:MvxBind="{'ItemsSource':{'Path':'Squares'}, 'ClickItemSquare':{'Path':'ClickCommand'}}" />
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/LeSommet.ZooSnap.UI.Android"
android:layout_width="80dp"
android:layout_height="80dp"
android:padding="5dp"
android:layout_gravity="center"
local:MvxBind="{'ResourcesImagePath':{'Path':'ImagePath'}}"
/>
单击项目GridView时如何返回ImageView实例?(或者我如何返回单击我的对象的实例)下面的三个答案。。。我喜欢标有3的那一个 1) 更简单的方法 在一个非常基本的层面上,我认为您可以使用内置绑定来实现这一点 查看
项目单击中的
,您应该能够:
<cirrious.mvvmcross.binding.android.views.MvxBindableGridView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="4"
android:gravity="center"
android:listSelector="#00000000"
local:MvxItemTemplate="@layout/itemimage"
local:MvxBind="{'ItemsSource':{'Path':'Squares'}, 'ItemClick':{'Path':'ClickCommand'}}" />
如果这不起作用,那么请-网格是社区捐赠给MvvmCross的,所以我还没有使用过它
2) 使您的自定义绑定工作 如果您确实想进行自定义绑定 使用Intellisense,它看起来像一个
AdapterView。ItemClickEventArgs
有几个潜在的有用属性:
e.View;
e.Position;
因此,如果愿意,您可以访问视图
,然后可以使用FindViewById
之类的工具来查找包含的视图
或者您可以访问位置
,然后可以:
-使用适配器方法,如public override Object GetItem(int-position)
从原始数组中获取Java包装的对象
-或者可以直接在传入数组或可枚举数组上使用访问器方法
3) 我通常的工作方式 当我只想单击列表项或列表项的一部分时,我通常不做这种自定义绑定 相反,我编写ViewModels,以便它们公开支持行为的集合—我尝试为模型对象而不是模型对象本身提供支持行为的包装器 在这种方法中,ViewModel公开了一个
列表
,而不是列表
列表项中的axml具有如下绑定:
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res/LeSommet.ZooSnap.UI.Android"
android:layout_width="80dp"
android:layout_height="80dp"
android:padding="5dp"
android:layout_gravity="center"
local:MvxBind="{'ResourcesImagePath':{'Path':'TheSquare.ImagePath'},'Click':{'Path':'TheCommand'}}"
/>
网格的axml是:
<cirrious.mvvmcross.binding.android.views.MvxBindableGridView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="4"
android:gravity="center"
android:listSelector="#00000000"
local:MvxItemTemplate="@layout/itemimage"
local:MvxBind="{'ItemsSource':{'Path':'WrappedSquares'}}" />
此示例代码改编自-那里的答案也与此问题相关
此方法的一个真实示例是会议示例,它使用
WithCommand
启用从列表到详细视图的导航
然而。。。这种方法有一个警告-请注意,当使用WithCommand
时,我们在iOS/MonoTouch中发现内存泄漏-基本上GarbageCollection拒绝收集嵌入的MvxRelayCommand
-这就是为什么WithCommand
可以IDisposable
以及BaseSessionListViewMode
分离视图时,清除列表并使用命令处置元素 第四个答案(在对前三个答案进行评论之后…)
绑定与视图模型通信有关
动画不是ViewModel或绑定真正应该处理的事情
在我看来,最好为动画使用自定义控件。有关MonoDroid中的自定义控件,请参见您最初将其标记为“C#android monocross”-没有任何一个提醒我这是一个“MonoDroid mvvmcross”问题。当您单击项目GridViewClick只是一个C#委托时,我需要它来运行动画和音乐-它可以多播到许多事件处理程序