我使用内容对话框会在选择网格中的项目时显示实例数据。
在调用页面的视图模型中,当选择一个项目时,将执行以下方法。
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}}?
答案 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>
中查看我已完成的示例