我修复定制一些项目其中之一,我需要使用定制的一些问题ViewCell
在分隔的类和文件这样的:
<?xml version="1.0" encoding="UTF-8"?>
<ViewCell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="HBRS.Controls.ViewCellTemplates.ArticleItemViewCell">
<Image>
<Image.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding BindingContext.clickCommand, Source={x:Reference Name=mArt}}"
CommandParameter="{Binding .}" />
</Image.GestureRecognizers>
</Image>
</ViewCell>
其中, mArt
认为,吩咐做一些事情吧
之后,我在我的使用该观察室xamarin
网页这样的:
<ListView.ItemTemplate>
<DataTemplate>
<Cell:ArticleItemViewCell />
</DataTemplate>
</ListView.ItemTemplate>
当我运行我的设备上的应用程序,它抛出一个异常说找不到“沃尔玛”引用的 ,所以我需要一些方法来传递对象 Source={x:Reference Name=mArt}
了相同的结果,或使互动是命令将使它
从你写的东西,我认为您在使用视图ViewCell
像
<ContentView ...
x:Name="mArt">
<ListView ...>
<ListView.ItemTemplate>
<DataTemplate>
<templates:ArticleItemViewCell ... />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentView>
现在你正试图引用视图mArt
从ViewCell
。 不幸的是这并不是事情是如何工作的。 mArt
是不是像一个全局变量,但您的视图类的成员(如果你感兴趣的细节,看看在.xaml.g.cs
是在你的目标文件夹中创建文件)。
ArticleItemViewCell
不过是不同类的,你不能简单地访问一些其他类的字段。 ArticleItemViewCell
不知道什么mArt
。 虽然它可能可以访问父在某些方面,我建议你向没有,因为你往往忘记这些细节,几个月后,你会看到你的观点,并想知道与细胞的相互作用来实现,直到你意识到,该小区确实有些腥物。 它只会花费你的时间。 去过也做过。 相信我。
而是创造类型的绑定属性Command
你viewcell,并从您的视图包含绑定到它
在ArticleItemViewCell.xaml.cs
public static readonly BindableProperty TappedCommandProperty = BindableProperty.Create(nameof(TappedCommand), typeof(Command), typeof(ArticleItemViewCell));
public Command TappedCommand
{
get => (Command)GetValue(TappedCommandProperty);
set => SetValue(TappedCommandProperty, value);
}
现在你可以从你的绑定它们ArticleItemViewCell
<ViewCell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="HBRS.Controls.ViewCellTemplates.ArticleItemViewCell"
x:Name="Cell">
<Image>
<Image.GestureRecognizers>
<TapGestureRecognizer
Command="{Binding TappedCommand, Source={x:Reference Cell}}"
CommandParameter="{Binding .}" />
</Image.GestureRecognizers>
</Image>
</ViewCell>
而从您的视图可以绑定clickCommand
你的虚拟机
<ContentView ...
x:Name="mArt">
<ListView ...>
<ListView.ItemTemplate>
<DataTemplate>
<templates:ArticleItemViewCell TappedCommand="{Binding Source={x:Reference mArt}, Path=BindingContext.clickCommand}" ... />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentView>
我没有尝试确切的代码,但基本上这个现在应该工作。
请注意:消耗ItemTapped
事件( 见文档 )与事件的命令行为( 见这里 )是更具表现力和备件你额外的命令。