我认为我试图将DataTemplate从ListView移到资源字典中,但它以某种方式破坏了绑定。
我验证了,当我对Textblock文本进行硬编码时,它会显示在列表视图中,并且看来列表视图数据源绑定正在工作,它只是无法显示我的数据。
这是字典:
<ResourceDictionary
x:Class="Marathon.Resources.ListViewTemplate"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Marathon">
<DataTemplate x:Key="LVTemplate" x:DataType="local:Result">
<StackPanel Orientation="Horizontal" Height="Auto" Padding="12" AutomationProperties.Name="{x:Bind ID}">
<TextBlock Text="{x:Bind ToString()}" VerticalAlignment="Center" Style="{ThemeResource BaseTextBlockStyle}" Foreground="White" Margin="12,0,0,0" FontSize="24"/>
</StackPanel>
</DataTemplate>
</ResourceDictionary>
这是我引用模板的方式:
<ListView Grid.Row="1" ItemsSource="{x:Bind VM.Results}" ItemTemplate="{StaticResource LVTemplate}" Background="#FF343434" >
</ListView>
这是当我将其放在listview模板而不是字典中时的外观:
<ListView Grid.Row="1" ItemsSource="{x:Bind VM.Results}" Background="#FF343434" >
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Result">
<StackPanel Orientation="Horizontal" Height="Auto" Padding="12" AutomationProperties.Name="{x:Bind ID}">
<TextBlock Text="{x:Bind ToString()}" VerticalAlignment="Center" Style="{ThemeResource BaseTextBlockStyle}" Foreground="White" Margin="12,0,0,0" FontSize="24"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
以下是它在ResourceDictionary中不在运行时的屏幕截图:
这是行不通的:
编辑: 这是我的App.xaml:
<Application
x:Class="Marathon.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Marathon">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Resources/VCenterTextBox.xaml"/>
<ResourceDictionary Source="Resources/KeypadButton.xaml"/>
<ResourceDictionary Source="Resources/ListViewTemplate.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
答案 0 :(得分:1)
最好的方法是在App.xaml中添加引用,然后就可以在应用程序中的任何地方使用DataTemplate。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Path/To/Your/ResourceFile/ListViewDataTemplate.xaml" />
<ResourceDictionary Source="Another/Path/To/Your/ResourceFile/EGButtonTemplateStyle.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
答案 1 :(得分:1)
在ResourceDictionary中使用x:Bind时,您需要声明Dictionary部分并创建一个代码隐藏文件以实例化它:
<ResourceDictionary
x:Class="Marathon.Resources.ListViewTemplate"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Marathon">
<DataTemplate x:Key="LVTemplate" x:DataType="local:Result">
<StackPanel Orientation="Horizontal" Height="Auto" Padding="12" AutomationProperties.Name="{x:Bind ID}">
<TextBlock Text="{x:Bind ToString()}" VerticalAlignment="Center" Style="{ThemeResource BaseTextBlockStyle}" Foreground="White" Margin="12,0,0,0" FontSize="24"/>
</StackPanel>
</DataTemplate>
</ResourceDictionary>
隐藏代码: 使用Windows.UI.Xaml.Data;
namespace Marathon.Resources
{
public partial class ListViewTemplate
{
public ListViewTemplate()
{
InitializeComponent();
}
}
}
App.xaml:
提示:像对象一样实例化模板很重要,这样才能调用分部类的构造函数和“ InitializeComponent()”。不要引用该文件。
<Application
x:Class="Marathon.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Marathon">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<local:ListViewTemplate"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>