2011-09-23 16 views
5

Próbuję utworzyć DataTemplate do mapowania prosty typ danych z odpowiednim widokiem następująco:Jak zdefiniować niejawne szablony danych w Metro XAML?

<DataTemplate DataType="{x:Type src:Person}"> 
    <TextBox Text="{Binding Name}"/> 
</DataTemplate> 

otrzymuję błąd kompilatora informacją, że właściwość Typ danych nie jest rozpoznawany lub dostępne. Czy coś mi umyka? Czy istnieje nowa składnia tego działania lub czy brakuje tej funkcji? Czy istnieją alternatywne rozwiązania dla ukrytych szablonów?

Dla porównania, tutaj jest pełny kod z DataTemplate zakwalifikowane używając x: Key atrybut (które działa):

<UserControl x:Class="Metro_App.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:src="clr-namespace:Metro_App" 
    mc:Ignorable="d" 
    d:DesignHeight="768" d:DesignWidth="1366"> 

    <UserControl.Resources>   
     <DataTemplate x:Key="PersonTemplate"> 
      <TextBlock Text="{Binding Name}" Foreground="White" FontSize="72"/> 
     </DataTemplate> 
    </UserControl.Resources> 

    <Grid x:Name="LayoutRoot" Background="#FF0C0C0C"> 
     <ContentControl Content="{Binding MyPerson}" ContentTemplate="{StaticResource PersonTemplate}"/> 
    </Grid> 

</UserControl> 

Odpowiedz

9

W WinRT składnia mapowania przestrzeni nazw CLR na XAML jest różna. Należy również zmienić mapowanie od:

xmlns:src="clr-namespace:Metro_App" 

do

xmlns:src="using:Metro_App" 

celu uzyskania dalszych informacji na temat przejścia z technologii Silverlight do WinRT, zobacz series of blog posts by Morten Nielsen lub artykuł pisałem o creating a cross platform Silverlight/WinRT application.

Jednak ... jeśli spojrzeć na API documentation for DataTemplate you will find that there is not DataType property. W obrębie WinRT istnieje niejawna stylistyka, ale nie domyślna templatura danych.

+0

Istnieje jednak "DataTemplateKey", który jest intrygujący. –

+0

Tak, jest. Być może wskazówka, że ​​domyślne szablony są już w drodze? – ColinE

-3

masz definiowania nazw? xmlns: src = "clr-namespace: WpfApplicationNamespace"

<Window x:Class="WpfApplicationNamespace.MainWindow" 
    xmlns:src="clr-namespace:WpfApplicationNamespace" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

<Window.Resources> 
    <DataTemplate DataType="{x:Type src:Persone}"/> 
</Window.Resources> 
<Grid> 
    <StackPanel Orientation="Vertical"> 
     <Button Content="fffff" Click="Button_Click" /> 
    </StackPanel> 
</Grid> 
</Window> 
+0

Tak, mam. Zmodyfikowałem mój oryginalny wpis z wklejonym pełnym plikiem MainPage.xaml. – robzhu

+1

@Radik WinRT używa innej składni dla mapowań nazw. – ColinE

+0

To smutne, teraz powinniśmy znać oba z nich. – Radik

2

Silverlight nie posiada DataTemplate.DataType i podejrzewam, że Windows XAML ramy odziedziczyła to ograniczenie. Zamiast tego może być konieczne użycie DataTemplateSelector.

Co ciekawe, ma klasę DataTemplateKey, ale jej utworzenie z XAML nie działa.