x:资源字典中的绑定不起作用

时间:2016-11-17 14:37:38

标签: xaml mvvm uwp xbind compiled-bindings

我正在努力掌握编译的数据绑定概念。我有一个视图(MainPage)包含一个ListBox和一个用于该ListBox的数据模板(ItemTemplate)。 MainPage有一个MainPageViewModel,它包含一个ItemViewModels的ObservableCollection。 ItemViewModel只包含一个属性Name。

的MainPage:

<Page x:Class="TestApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:TestApp">
    <Page.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ItemDictionary.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Page.Resources>

    <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <ListBox ItemsSource="{x:Bind ViewModel.Items}"
                 ItemTemplate="{StaticResource ItemTemplate}" />
    </Grid>
</Page>

包含datatemplate的资源字典:

<ResourceDictionary
    x:Class="TestApp.ItemDictionary"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:TestApp">

    <DataTemplate x:Key="ItemTemplate" x:DataType="local:ItemViewModel">
        <TextBlock Text="{x:Bind Name}" />
    </DataTemplate>    
</ResourceDictionary>

此代码编译但是当我运行它时,绑定到Name属性失败,尽管生成了项目。如果我使用经典绑定一切正常,如果我将数据模板直接放在MainPage的资源中,它也可以工作。我错过了什么?

1 个答案:

答案 0 :(得分:3)

正确:

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <local:ItemDictionary />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>

不正确:

<Page.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="ItemDictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Page.Resources>