Пользовательская кнопка ViewCell Container имеет команду и привязку к этой команде

По определению, UUID - это 32 шестнадцатеричных цифры, разделенных в 5 группах дефисами, как вы описали. Вы не должны пропустить ни одного с вашим регулярным выражением.

http://en.wikipedia.org/wiki/Uuid#Definition

0
задан LofiMAM 4 March 2019 в 11:27
поделиться

1 ответ

Из того, что вы написали, я предполагаю, что у вас есть представление, использующее 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 в вашей ячейке просмотра и привяжите к нему из содержащего вас представления

В 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 ( см. Документы ) с поведением события для команды ( см. Здесь ) больше Выразителен и избавляет вас от дополнительной команды.

0
ответ дан Paul Kertscher 4 March 2019 в 11:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: