【发布时间】:2019-04-22 21:30:33
【问题描述】:
我有一个ListView,它从资源文件中获取它的ItemTemplate。
我有一个资源字典如下!
<?xml version="1.0" encoding="utf-8" ?>
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:ffimageloading="clr-namespace:FFImageLoading.Forms;assembly=FFImageLoading.Forms"
xmlns:common="clr-namespace:xx.Common;assembly=xx"
x:Class="xx.ResourceDictionaries.BaseHomeStyles">
<DataTemplate x:Key="ListItemTemplate">
<ViewCell>
<Grid Padding="{StaticResource ListPadding}">
<Grid.RowDefinitions>
<RowDefinition Height="1.5*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<ffimageloading:CachedImage Grid.Row="0" Aspect="Fill" DownsampleToViewSize="True" BitmapOptimizations="True"
ErrorPlaceholder = "nopreviewlandscape" LoadingPlaceholder = "loadingicon" Source="{Binding TripImage}" />
<StackLayout Grid.Row="1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Text="{Binding TripName}" FontAttributes="Bold" TextColor="{StaticResource PrimaryColor}" />
<Image Grid.Column="1" Source="downarrow" Rotation="-90" BackgroundColor="{Binding PrimaryColor}"/>
</Grid>
<Label Text="{Binding ReferenceNumber}" FontAttributes="Bold"/>
<Label Text="{Binding TripUIStartDate}" />
<Label Text="{Binding DaysDetails}" TextColor="{StaticResource AppQuaternaryBackground}" />
</StackLayout>
<!--<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding Path=BindingContext.ToItineraryCommand, Source={x:Reference HomeList}}" CommandParameter="{Binding .}"/>
</Grid.GestureRecognizers>-->
</Grid>
</ViewCell>
</DataTemplate>
</ResourceDictionary>
然后我将这个DataTemplate 用作ItemTemplate,如下所示:
<ListView HasUnevenRows = "true" ItemsSource="{Binding CurrentTripInfo}" BackgroundColor="Transparent"
CachingStrategy="RecycleElement" x:Name="HomeList" SeparatorVisibility ="Default" Grid.Row="1" ItemTemplate="{StaticResource ListItemTemplate}" />
我正在添加类似这样的 ResourceDictionary:
<ContentPage.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<resources:BaseHomeStyles/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</ContentPage.Resources>
现在我在这里要做的是在我的ViewModel 中设置一个点击Command,
通常,我是如何做到这一点的,就像我在上面的示例中那样为ListView 设置一个名称,然后使用这个名称来获取列表的BindingContext,然后使用它来设置命令,但是当我尝试现在使用它会引发 XML 解析器异常:
Xamarin.Forms.Xaml.XamlParseException:位置 38:43。找不到
HomeList引用的对象
现在我有两个问题:
1- 以上述方式为 ListView 设置命令的正确方法是什么?
2- 如果将来我计划将其移至 App.XAML(如果多次使用),那么我该如何设置命令呢?
【问题讨论】:
-
您可以查看这篇文章以供参考:stackoverflow.com/questions/29776976/…
-
您如何在资源字典中使用 DataTemplate 而不是自定义视单元?无论如何,这可能是一个有趣的阅读:forums.xamarin.com/discussion/96459/…
-
@Knoop 谢谢,但我更喜欢行为解决方案
-
@G.hakim 没问题,只是想一些替代方案。我明白在这种情况下,这是在更清洁但特定情况下与更通用/可扩展但不太干净之间的决定。这是一个因项目而异的决定,所以只有你才能做出那个决定。无论如何,祝项目好运!
-
@Knoop 谢谢你,兄弟,感谢你的帮助。
标签: xaml xamarin xamarin.forms xamarin.android xamarin.ios