2015-10-07 21 views
1

我正在使用內容對話框在網格中的項目被選中時顯示實例數據。在Windows通用應用程序中綁定到xaml頁面的DataContext

在調用頁面的視圖模型中,選擇某個項目時,將執行以下方法。

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。我試過各種形式的綁定語法,但沒有運氣。如何正確設置ContentControlDataContextContentDialogDataContext

回答

1

當調試到我ContentTemplateSelector,我結合總是 空

您需要設置數據ContentControl中控制的內容屬性綁定,見備註在MSDN

的ContentControl的內容屬性可以是任何類型的對象,如字符串,UIElement或DateTime等 。默認情況下,當 Content屬性設置爲UIElement時,UIElement將顯示在ContentControl的 中。當內容設置爲其他類型的對象時,該對象的 字符串表示形式將顯示在ContentControl的 中。

所以下面的XAML應該工作:

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

檢查我完成樣品中Github

enter image description here

+0

我也嘗試設置'Content =「{Binding}」'沒有運氣。我會看看你的樣品。 – earthling

+0

通過您的示例進行調試,我注意到第一次通過'SelectTemplateCore'該項目爲空,因此調用了'base.SelectTemplateCore'。這第二次項目不是null。我沒有調試到我的代碼。它現在在工作,謝謝! – earthling

1

你也必須綁定內容。

你的數據源(DataContext的),以及如何將數據顯示(模板),現在你需要指定其性質帶來了一起。

+0

我也試着設置'CONTENT = 「{結合}」'用沒有運氣。 – earthling

相關問題