Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ItemTemplateSelector不适用于没有绑定的ListView_C#_Listview_Uwp_Uwp Xaml - Fatal编程技术网

C# ItemTemplateSelector不适用于没有绑定的ListView

C# ItemTemplateSelector不适用于没有绑定的ListView,c#,listview,uwp,uwp-xaml,C#,Listview,Uwp,Uwp Xaml,我有一个ListView,我在代码隐藏中以编程方式设置了它的ItemsSource。我以前只有一个模板,但现在我想使用多个模板,并根据我添加到ListView的项目选择模板 这是我的XAML代码: <Page.Resources> <local:TemplateSelector x:Key="myTemplateSelector" TemplateA="{StaticResource TemplateA}" TemplateB="{StaticResource Template

我有一个ListView,我在代码隐藏中以编程方式设置了它的ItemsSource。我以前只有一个模板,但现在我想使用多个模板,并根据我添加到ListView的项目选择模板

这是我的XAML代码:

<Page.Resources>
<local:TemplateSelector x:Key="myTemplateSelector" TemplateA="{StaticResource TemplateA}" TemplateB="{StaticResource TemplateB}" />

<!-- TemplateA and TemplateB -->
</Page.Resources>

 <ListView
        x:Name="MasterListView"
        Grid.Row="1"
        ItemContainerTransitions="{x:Null}" 
        ItemTemplateSelector="{StaticResource myTemplateSelector}"
        IsItemClickEnabled="True"
        ItemClick="MasterListView_ItemClick"/>
然而,这是行不通的。我总是为每个项目获得相同的文本,而不是所需的模板:AppName.ViewModels.ViewModel1(我要显示的数据类型)

在过去,当我只有一个itemtemplate时,我在xaml中使用了它,它可以工作:

        <ListView
        x:Name="MasterListView"
        Grid.Row="1"
        ItemContainerTransitions="{x:Null}" 
        ItemTemplate="{StaticResource TemplateA}"
        IsItemClickEnabled="True"
        ItemClick="MasterListView_ItemClick"/>

如何使ItemTemplateSelector工作?我在那里放置了断点,但它甚至没有被调用

 public override DataTemplate SelectTemplate(object item, DependencyObject container)
而不是

public new DataTemplate SelectTemplate(object item, DependencyObject container)
public new DataTemplate SelectTemplate(object item, DependencyObject container)
编辑,由于访问修饰符,这是4.5.2的签名(注意它是公共的):


如以下文件的备注所述:

应用程序代码通常不调用方法;这些方法的存在使得基础结构可以调用它,同时根据从属性值(如中使用实例来选择正确的模板。要在派生类中提供特定模板,请重写方法

所以我们应该使用

protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
而不是

public new DataTemplate SelectTemplate(object item, DependencyObject container)
public new DataTemplate SelectTemplate(object item, DependencyObject container)

尝试此操作时,会出现以下错误:TemplateSelector.SelectTemplate(对象,DependencyObject)':在重写“受保护”继承成员“DataTemplateSelector”时无法更改访问修饰符。SelectTemplate(对象,DependencyObject)'奇怪,我想是另一个框架版本吗?但是,您应该重写而不是新建。我用源代码更新了我的帖子,对我来说,访问修饰符是公共的。