如何解决如何将Xamarin DataTemplateSelector与按文件夹组织的DataTemplates一起使用?
我正在尝试实现类似此MS Docs示例的示例,并将DataTemplates作为单独的文件: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/templates/data-templates/selector
我的文件夹结构...
Project
|
└─ Views\
| MyView.xaml
|
└───DataTemplates\
DT1.xaml (no .cs)
DT2.xaml (no .cs)
DTSelector.cs
从MyView.xaml ...
<ContentPage ...
xmlns:datatemplates="clr-namespace: Project.Views.DataTemplates"/>
<ContentPage.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<datatemplates:DT1/>
<datatemplates:DT2/>
<!-- This is the x:Key name,right? -->
<!-- Intellisense can't find these -->
</ResourceDictionary.MergedDictionaries>
<datatemplates:DTSelector x:Key="dTSelector"
DT1= "{StaticResource dT1}"
DT2= "{StaticResource dT2}"/>
</ResourceDictionary>
从数据模板...
<?xml version="1.0" encoding="utf-8" ?>
<ResourceDictionary xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">
<!-- x:Class has been removed -->
<DataTemplate x:Name="DT1" x:Key="dT1">
<Grid,etc...
DataTemplateSelector ...
public class DTSelector: DataTemplateSelector
{
public DataTemplate DT1{ get; set; }
public DataTemplate DT2{ get; set; }
protected override DataTemplate OnSelectTemplate(object item,BindableObject container)
{
switch (App.CurrentUser.someEnum)
{
case SomeEnum.Pref1:
return DT1;
break;
case SomeEnum.Pref2:
return DT2;
break;
default:
return DT1;
}
}
}
我将代码摔入了App级别并进行了编译,但是DTSelector始终返回一个空对象,并引发异常。无论如何,我都希望在页面级别使用它。似乎应该有一个... ResourceDictionary Source =“ DT1.xaml” x:Key =“ DT1”但这是无效的。
我认为MyView无法通过xmlns找到模板,因为Intellisense仅能看到cs文件...但是我遇到了绿色的花键,编译错误XLS0414:“未找到类型'datatemplates:DT1'...” >
GitRepo在这里,为您带来的快乐: https://github.com/BullCityCabinets/DataTemplateSelectorExample201014
感谢您的帮助!
解决方法
我发现您是否将DT1.xaml
和MyView.xaml
放在同一文件夹中。您可以通过以下方式引用资源字典:
<ContentPage.Resources>
<ResourceDictionary Source="DT1.xaml" />
<ResourceDictionary Source="DT2.xaml" />
<datatemplates:DTSelector x:Key="dTSelector"
DT1ref = "{StaticResource DT1key}"
DT2ref = "{StaticResource DT2key}"/>
</ContentPage.Resources>
和文件夹:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。