2016-09-28 38 views
1

我有一個DataGrid是這樣的視圖模型中:我想模板對象屬性,按類型,另一個的DataTemplate

public class Cell 
{ 
    public CellValue CellValue { get; } 
} 

而且CellValue屬性可以有幾種類型:

public class CellValue 
{ 
    public double Value { get; } 
} 

public class TwoValueCell : CellValue 
{ 
    public double Value2 { get; } 
} 

DataGrid將ItemsSource綁定到我的行和單元格的列表。

DataGrid按預期綁定數據:我在每個DataGridCell中獲取一個Cell。所以我有這樣的資源樣式(本地資源現在):

<DataGrid.Resources> 
    <Style TargetType="{x:Type DataGridCell}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type DataGridCell}"> 
        <ContentPresenter x:Name="ContentHost" 
          Margin="{TemplateBinding Padding}"/> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
    <DataTemplate DataType="{x:Type viewModel:Cell}"> 
     <Grid> 
      <TextBlock Text="{Binding CellValue}"/> 
     </Grid> 
    </DataTemplate> 
</DataGrid.Resources> 

我喜歡有綁定到視圖模型類型的模板...

的問題是:不是綁定在TextBlock上,我想膨脹另一個DataTemplate,我可以通過特定的CellValue類型再次定義。

換句話說,在psudocode它可能是這樣的:

<DataTemplate DataType="{x:Type viewModel:Cell}"> 
    <Grid> 
     <DataTemplate DataType="{x:Type viewModel:CellValue}"> 
      <TextBlock Text="{Binding Value}"/> 
     </DataTemplate> 
    </Grid> 
</DataTemplate> 

但我需要的地方定義特定CellValue數據模板...

的底線是有一個類型對於DataGridCell ---以及具有該類型的數據模板---但是在單元屬性上有若干特定類型,並且我想根據PROPERTY的實際類型定義自定義數據模板。

任何幫助?

回答

1

您可以使用ContentControl。

<DataTemplate ...> 
    <Grid> 
     <ContentControl DataContext="{Binding SomeProperty}"> 
     <ContentControl.ContentTemplate> 
      <DataTemplate ...> ... </DataTemplate> 
     </ContentControl.ContentTemplate> 
     </ContentControl> 
    </Grid> 
</DataTemplate> 
+0

是的!我剛剛嘗試過,它正在工作!它使用嵌套數據模板上的自定義類型以及... –

相關問題