2012-01-18 14 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を見ました:

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

そして、この行は表示にいくつかのコンテンツを追加します。 //windowsphonegeek.com/articles/Implementing-Windows-Phone-7-DataTemplateSelector-and-CustomDataTemplateSelector? – Ku6opr

+0

ええ、でも、私はアイテムのコレクションを扱っていると仮定しています。私のビューモデルでは、テンプレートを選択したい単一のアイテムしかありません。私はどのように単一の項目にそれを適用するか分からない。 :。( – zyash

答えて

4

アイテムのリストではなく、アイテムが1つある場合は、ContentTemplateというカスタムでContentPresenterを使用してこのアイテムを表示できます。あなたが知っているよう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

control.Content = "123"; 
+0

おかげで - 私はそれはしかし仕事を得るカント私はこの構文を試してみました:<のContentPresenter> <ローカル:MyTemplateSelectorコンテンツ= "{バインディング}"> \t \t \t <ローカル:MyTemplateSelector.A> \t \t \t \t \t \t \t \t \t \t \t \t - が、何も – zyash

+0

コール 'yourcontrol.Content = MYITEM表示されません;'私が見る – Ku6opr

+0

ああを表示するには、いくつかのデータを追加します。コンテンツ・プレゼンターの「コンテンツ」属性は、リストボックス内のたとえばItemsSourceの等値として表されます。ありがとうございました! – zyash

関連する問題