如何在使用 Prism 时将带有参数的命令绑定到 Syncfusion 列表视图...?
How do I bind a Command with Parameters to a Syncfusion Listview... while using Prism?
我正在使用带有 Xamarin 表单的 Syncfusion Listview,并想使用位于我的模型中的 ICommand
界面。
阅读 help file for this control 时,它似乎指示我在控件本身上设置一个事件,然后在我的视图中处理响应。
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>
我可以在我的 ViewModel 中处理点击事件 (SelectionChanged) 吗?
我应该在我的模板中创建一个按钮吗,或者这是一个 hack?
我没有使用过 syncfusion 控件,但是从文档来看它似乎支持基本控件功能。
您可以使用 EventToCommandBehavior - https://prismlibrary.github.io/docs/xamarin-forms/EventToCommandBehavior.html
从 link 复制:
<ListView>
<b:EventToCommandBehavior EventName="ItemTapped"
Command="{Binding ItemTappedCommand}"
EventArgsParameterPath="Item" />
</ListView>
您必须将以下命名空间添加到页面。
xmlns:b="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"
附带说明一下,为什么不使用 DelegateCommand
我们最后检查了报告的查询“使用 PRISM 时 ViewModel 中的事件”。您可以使用棱镜库中提供的 EventToCommandBehavior class 来实现您的要求。
代码片段: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 converter returns ItemSelectionChangedEventArgs while executing command
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 命令绑定到 Behaviors 中的 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>
我们已附上样本供您参考。您可以从以下位置下载相同的
Link: http://www.syncfusion.com/downloads/support/directtrac/general/ze/ListViewPrismMust1198452680
如果您想要任何特定的操作在单独单击按钮时应该起作用,您可以在模板中创建按钮。这不是黑客攻击。您也可以根据元素进行自定义。
我正在使用带有 Xamarin 表单的 Syncfusion Listview,并想使用位于我的模型中的 ICommand
界面。
阅读 help file for this control 时,它似乎指示我在控件本身上设置一个事件,然后在我的视图中处理响应。
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>
我可以在我的 ViewModel 中处理点击事件 (SelectionChanged) 吗?
我应该在我的模板中创建一个按钮吗,或者这是一个 hack?
我没有使用过 syncfusion 控件,但是从文档来看它似乎支持基本控件功能。
您可以使用 EventToCommandBehavior - https://prismlibrary.github.io/docs/xamarin-forms/EventToCommandBehavior.html
从 link 复制:
<ListView>
<b:EventToCommandBehavior EventName="ItemTapped"
Command="{Binding ItemTappedCommand}"
EventArgsParameterPath="Item" />
</ListView>
您必须将以下命名空间添加到页面。
xmlns:b="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"
附带说明一下,为什么不使用 DelegateCommand
我们最后检查了报告的查询“使用 PRISM 时 ViewModel 中的事件”。您可以使用棱镜库中提供的 EventToCommandBehavior class 来实现您的要求。
代码片段: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 converter returns ItemSelectionChangedEventArgs while executing command
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 命令绑定到 Behaviors 中的 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>
我们已附上样本供您参考。您可以从以下位置下载相同的
Link: http://www.syncfusion.com/downloads/support/directtrac/general/ze/ListViewPrismMust1198452680
如果您想要任何特定的操作在单独单击按钮时应该起作用,您可以在模板中创建按钮。这不是黑客攻击。您也可以根据元素进行自定义。