2012-01-18 59 views
1

我已經創建了一個DataTemplateSelector類。我想將其應用於單個項目,因此它會根據某些條件選擇模板。將DataTemplateSelector應用於單個項目

基本上我想有這個在XAML中的等價物:

% if myitem.A 
    <TextBlock Text="{Binding myitem.data }"/> 
% else if myitem.B 
    <Button Content="{Binding myitem.data }"/> 

public class MyTemplateSelector : DataTemplateSelector 
    { 

     public DataTemplate A { 
      get; 
      set; 
     } 

     public DataTemplate B { 
      get; 
      set; 
     } 


     public override DataTemplate SelectTemplate(object item, DependencyObject container) { 
      var myitem = item as MyItem; 
      if (myitem.A) 
       return A; 
      else if (myitem.B) 
       return B; 
      return base.SelectTemplate(item, container); 
     } 

    } 

我怎樣才能做到這一點?

謝謝。

+0

你看到這篇文章的http: //windowsphonegeek.com/articles/Implementing-Windows-Phone-7-DataTemplateSelector-and-CustomDataTemplateSelector? – Ku6opr 2012-01-18 12:59:58

+0

是的,但它假定我正在處理一個Items的集合。在我的View Model中,我只有一個項目,我想爲其選擇一個模板。不過,我不知道如何將其應用於單個項目。 :( – zyash 2012-01-18 13:04:56

回答

4

如果您有一個項目,而不是項目列表,則可以使用ContentPresenter和一個自定義ContentTemplate來顯示此項目。 ContentTemplate可以使用您的TemplateSelector如你所知:

 <ContentPresenter x:Name="control"> 
      <ContentPresenter.ContentTemplate> 
       <DataTemplate> 
        <local:MyTemplateSelector Content="{Binding}"> 
         <local:MyTemplateSelector.A> 
          <DataTemplate> 
           <TextBlock Text="null" /> 
          </DataTemplate> 
         </local:MyTemplateSelector.A> 
         <local:MyTemplateSelector.B> 
          <DataTemplate> 
           <TextBlock Text="{Binding}" /> 
          </DataTemplate> 
         </local:MyTemplateSelector.B> 
        </local:MyTemplateSelector> 
       </DataTemplate> 
      </ContentPresenter.ContentTemplate> 
     </ContentPresenter> 

這是我TemplateSelector

public override DataTemplate SelectTemplate(object item, DependencyObject container) 
    { 
     if (item == null) 
      return A; 

     return B; 
    } 

而此行的一些內容到顯示:

control.Content = "123"; 
+0

謝謝 - 我不能讓它工作,雖然我想這句法: <地方:MyTemplateSelector CONTENT = 「{結合}」> \t \t \t <本地:MyTemplateSelector.A> \t \t \t \t \t \t \t \t \t \t \t \t - 但沒有出現 – zyash 2012-01-18 14:59:51

+0

調用'yourcontrol.Content = myItem;'添加一些數據顯示 – Ku6opr 2012-01-18 16:04:01

+0

我明白了。內容展示器的「內容」屬性作爲例如ItemsSource在列表框中的等價值。謝謝! – zyash 2012-01-18 16:11:21

相關問題