自ViewCell含按钮命令并绑定到该命令(Custom ViewCell Contain Butt

2019-10-31 08:19发布

我修复定制一些项目其中之一,我需要使用定制的一些问题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}了相同的结果,或使互动是命令将使它

Answer 1:

从你写的东西,我认为您在使用视图ViewCell

<ContentView ...
    x:Name="mArt">
    <ListView ...>
        <ListView.ItemTemplate>
            <DataTemplate>
                <templates:ArticleItemViewCell ... />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
</ContentView>

现在你正试图引用视图mArtViewCell 。 不幸的是这并不是事情是如何工作的。 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事件( 见文档 )与事件的命令行为( 见这里 )是更具表现力和备件你额外的命令。



文章来源: Custom ViewCell Contain Button Has Command And Binding To This Command