绑定到Windows Universal App中的xaml页面的DataContext

时间:2015-10-07 20:33:22

标签: xaml data-binding windows-10 win-universal-app

我使用内容对话框会在选择网格中的项目时显示实例数据。

在调用页面的视图模型中,当选择一个项目时,将执行以下方法。

public virtual void ItemSelected(object sender, object parameter)
{
    var arg = parameter as Windows.UI.Xaml.Controls.ItemClickEventArgs;
    var clickedItem = arg.ClickedItem;
    var item = clickedItem as ItemsModel;

    var dialog = new ItemsDialog();
    dialog.DataContext = item;
    dialog.ShowAsync();
}

显示对话框,内容按预期显示。现在,我尝试将我的xaml拆分为不同的模板,并且我尝试使用ContentControl来显示相应的模板。我已经写了DataTemplateSelector来帮助选择正确的模板,但现在我无法弄清ContentControl的数据绑定(请参阅下面的简化版)。

<ContentDialog.Resources>
    <UI:MyTemplateSelector x:Key="MyTemplateSelector"
            Template1="{StaticResource Template1}"
            Template2="{StaticResource Template2}"/>

    <DataTemplate x:Key="Template1"/>
    <DataTemplate x:Key="Template2"/>
</ContentDialog.Resources>

<StackPanel>
    <ContentControl DataContext="{Binding}"
        ContentTemplateSelector="{StaticResource MyTemplateSelector}"/>
</StackPanel>

调试ContentTemplateSelector时,我的绑定始终为null。我尝试了各种形式的绑定语法而没有运气。如何将DataContext的{​​{1}}正确设置为ContentControl的<{1}}?

2 个答案:

答案 0 :(得分:1)

您还必须绑定内容。

Content="{Binding}"

您拥有数据源(DataContext)以及数据的显示方式(模板),现在您需要指定哪些属性将它们组合在一起。

答案 1 :(得分:1)

  

调试我的ContentTemplateSelector时,我的绑定总是如此   空

您需要为ContentControl控件的Content属性设置数据绑定,请参阅MSDN中的备注:

  

ContentControl的Content属性可以是任何类型的对象,   例如字符串,UIElement或DateTime。默认情况下,当   Content属性设置为UIElement,UIElement显示在   ContentControl。当Content设置为其他类型的对象时,a   对象的字符串表示形式显示在   ContentControl中。

所以下面的xaml应该可以工作:

<StackPanel>
    <ContentControl Content="{Binding}"
        ContentTemplateSelector="{StaticResource MyTemplateSelector}"/>
</StackPanel>

Github

中查看我已完成的示例

enter image description here