3

コードビハインドファイルを使用して、つまりxamlの代わりにC#を使用して、win8(WinRT)アプリでDataTemplateを作成するにはどうすればよいですか。

4

1 に答える 1

4

表示しているものの種類に応じてテンプレートを作成したい場合に、これが役立つ理由がわかります。これを機能させるための鍵は、Windows.UI.Xaml.Markup.XamlReader.Load()です。データテンプレートを含む文字列を受け取り、それをDataTemplateオブジェクトに解析します。そのオブジェクトを使用したい場所に割り当てることができます。以下の例では、ListViewのItemTemplateフィールドに割り当てています。

XAMLは次のとおりです。

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <ListView x:Name="MyListView"/>
</Grid>

そして、これがDataTemplateを作成するコードビハインドです。

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        var items = new List<MyItem>
        {
            new MyItem { Foo = "Hello", Bar = "World" },
            new MyItem { Foo = "Just an", Bar = "Example" }
        };
        MyListView.ItemsSource = items;

        var str = "<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\">" +
                "<Border Background=\"Blue\" BorderBrush=\"Green\" BorderThickness=\"2\">" +
                    "<StackPanel Orientation=\"Vertical\">" +
                        "<TextBlock Text=\"{Binding Foo}\"/>" +
                        "<TextBlock Text=\"{Binding Bar}\"/>" +
                    "</StackPanel>" +
                "</Border>" +
            "</DataTemplate>";
        DataTemplate template = (DataTemplate)Windows.UI.Xaml.Markup.XamlReader.Load(str);
        MyListView.ItemTemplate = template;
    }
}

public class MyItem
{
    public string Foo { get; set; }
    public string Bar { get; set; }
}
于 2012-09-07T22:51:29.780 に答える