Как связать команду с параметрами с представлением Syncfusion Listview ... при использовании Prism? - PullRequest
0 голосов
/ 07 сентября 2018

Я использую Syncfusion Listview с формами Xamarin и хочу использовать интерфейс ICommand, расположенный в моей модели.

При чтении файла справки для этого элемента управления кажется, что он указывает мне на установку события на самом элементе управления, а затем обрабатывает ответ в моем представлении.

Screen.xaml

       <syncfusion:SfListView x:Name="listView" Grid.Row="1"  ItemsSource="{Binding TrustAnchors}" 
           SelectionChanged="Handle_SelectionChanged" ItemSize="100" >
            <syncfusion:SfListView.ItemTemplate>
                <DataTemplate>
                    <Grid Padding="10">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="0.4*" />
                            <RowDefinition Height="0.6*" />
                        </Grid.RowDefinitions>
                        <Label Text="{Binding Name}" FontAttributes="Bold" TextColor="Teal" FontSize="21" />
                        <Label Grid.Row="1" Text="{Binding Description}" TextColor="Teal" FontSize="15"/>
                    </Grid>
                </DataTemplate>
            </syncfusion:SfListView.ItemTemplate>
        </syncfusion:SfListView>
  • Могу ли я обработать событие нажатия (SelectionChanged) в моем ViewModel?

  • Должен ли я создать кнопку в моем шаблоне, или это хак?

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Мы проверили сообщенный запрос «События во ViewModel при использовании PRISM» с нашей стороны. Вы можете выполнить свои требования, используя класс EventToCommandBehavior, доступный в библиотеке призмы.

Фрагмент кода: C #: Команда для определения события во ViewModel.

public class MainPageViewModel : BindableBase, INavigationAware
{
    private Command<ItemSelectionChangedEventArgs> selectionChangedCommand;
    public Command<ItemSelectionChangedEventArgs> SelectionChanged
    {
        get { return selectionChangedCommand; }
        set { selectionChangedCommand = value; }
    }

    public MainPageViewModel()
    {
             SelectionChanged = new Command<ItemSelectionChangedEventArgs>(OnSelectionChanged);
    }

    private void OnSelectionChanged(ItemSelectionChangedEventArgs eventArgs)
    {

    }
}

# Конвертер EventArgs возвращает ItemSelectionChangedEventArgs при выполнении команды

public class EventArgs : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        object eventArgs = null;
        if (value is Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs)
            eventArgs = value as Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs;         
        return eventArgs;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

Фрагмент кода: XAML: EventToCommandBehavior связывает команду ViewModel с событием SfListView SelectionChanged в поведении.

xmlns:behvaior="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"

<ContentPage.Resources>
    <ResourceDictionary>
        <local:EventArgs x:Key="eventArgs" />
    </ResourceDictionary>
</ContentPage.Resources>

<listView:SfListView x:Name="listView" ItemSize="70"                      
                        ItemsSource="{Binding ContactsInfo}">
    <listView:SfListView.Behaviors>
        <behvaior:EventToCommandBehavior EventName="SelectionChanged"     
                                         EventArgsConverter="{StaticResource eventArgs}"
                                         Command="{Binding SelectionChanged}"/>
    </listView:SfListView.Behaviors>
    </listView:SfListView.ItemTemplate>
</listView:SfListView>

Мы приложили образец для справки. Вы можете скачать то же самое из следующего местоположения

Ссылка: http://www.syncfusion.com/downloads/support/directtrac/general/ze/ListViewPrismMust1198452680

Вы можете создать кнопку в своем шаблоне, если вы хотите какое-либо конкретное действие, которое должно работать, когда вы нажимаете одну кнопку. Это не хак. Вы также можете настроить на основе элемента.

0 голосов
/ 07 сентября 2018

Я не использовал элемент управления syncfusion, однако, судя по документации, он поддерживает базовые функции управления.

Вы можете использовать EventToCommandBehavior - https://prismlibrary.github.io/docs/xamarin-forms/EventToCommandBehavior.html

скопировано с ссылки:

<ListView>
    <b:EventToCommandBehavior EventName="ItemTapped"
                              Command="{Binding ItemTappedCommand}"
                              EventArgsParameterPath="Item" />
</ListView>

Вам потребуется следующее пространство имен для страницы.

xmlns:b="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"

на заметку, почему бы не использовать DelegateCommand

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...