2011-12-02 78 views
4

現在我有ListView和一個列有:控制與TemplateSelector財產

<GridViewColumn CellTemplateSelector="{StaticResource messagerEditorTemplateSelector}"/>

,一切都很好:電池充滿基於項目的內容。但是現在我想在這個單元格中放置兩個控件:一個模板必須基於綁定來選擇,而另一個則是使用名稱來控制,比如TimeRangeView。但我不明白它如何實施?所以我必須有這樣的代碼:

<GridViewColumn> 
    <DataTemplate> 
     <StackPanel> 
      <SomeControlWhichSupportTemplateSelector ... /> 
      <views:TimeRangeView ... /> 
     </StackPanel> 
    </DataTemplate> 
</GridViewColumn>` 

我應該使用哪種控制模板?我發現只有列表框,但它必須綁定到集合。當然,我可以綁定像:

<ListBox ItemsSource="{Binding Converter=ItemToCollectionConverter}" />

,但它看起來並不優雅。可能有另一種方式來做到這一點?

回答

9

您可以使用一個ContentControl中並設置其ContentTemplateSelector屬性:

<GridViewColumn> 
    <GridViewColumn.CellTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <ContentControl ContentTemplateSelector="{StaticResource messagerEditorTemplateSelector}" /> 
       <views:TimeRangeView ... /> 
      </StackPanel> 
     </DataTemplate> 
     </GridViewColumn.CellTemplate> 
    </GridViewColumn> 

注意,結合您的ContentControl中內工作,你將不得不設置Content屬性是的綁定使用哪個對象由選擇器返回的DataTemplate。

所以這對選項1.
您也可以只使用DataTriggers:

 <GridViewColumn> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <ContentControl Content="{Binding MyBoundObject}"> 
        <ContentControl.Style> 
         <Style> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding Path=MyBoundObject.ABooleanProperty}" Value="True"> 
            <Setter Property="ContentControl.ContentTemplate" Value="{StaticResource myFirstTemplate}" /> 
           </DataTrigger> 
           <DataTrigger Binding="{Binding Path=MyBoundObject.ABooleanProperty}" Value="False"> 
            <Setter Property="ContentControl.ContentTemplate" Value="{StaticResource mySecondTemplate}" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </ContentControl.Style> 
       </ContentControl> 
       <views:TimeRangeView ... /> 
       </StackPanel> 
      </DataTemplate> 
      </GridViewColumn.CellTemplate> 
     </GridViewColumn> 

這是我做的,它就像一個魅力=)

+0

謝謝,夥計!那就是我需要的。 至於第二選擇 - 感謝信息,但我更喜歡轉換器。在我的情況下,我選擇基於綁定對象類型的模板,所以我認爲最好不要在XAML中完成。 – Seekeer