Search code examples
c#wpfdatatemplatedefault

Specify a default empty DataTemplate instead of the default 'ToString()' DataTemplate


The default DataTemplate in a wpf application displays the result of the .ToString() method. I'm developing an application where the default DataTemplate should display nothing.

I've tried:

<Grid.Resources>
  <DataTemplate DataType="{x:Type System:Object}">
   <Grid></Grid>
  </DataTemplate>
</Grid.Resources>

But this doesn't work. Does anyone knows if this is possible without specifiing a specific DataTemplate for every class type in the application?


Solution

  • I know of no way to do this. As per Joe's comment below, WPF specifically disallows specifying a DataTemplate for type Object.

    Depending on your exact requirements, it may be easier to search for a DataTemplate that matches the specific type. If you find one, use it. Otherwise, display nothing. For example:

    <ContentControl Content="{Binding YourContent}" ContentTemplateSelector="{StaticResource MyContentTemplateSelector}"/>
    

    And in your selector (pseudo-code, obviously):

    var dataTemplateKey = new DataTemplateKey() { DataType = theType; };
    var dataTemplate = yourControl.FindResource(dataTemplateKey);
    
    if (dataTemplate != null)
    {
        return dataTemplate;
    }
    
    return NulloDataTemplate;