У меня была такая же проблема пару дней назад ... и я нашел решение ... Я не очень горжусь этим, но это работает ..
создайте таблицу данных и добавьте туда все возможные пользовательские элементы управления
<DataTemplate x:Key="WorkspaceItemTemplate">
<Grid>
<View:TreeView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=TreeView}" />
<View:GridView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=GridView}" />
<View:DataView Visibility="{Binding Converter={StaticResource ViewVisibilityConverter}, ConverterParameter=DataView}" />
</Grid>
</DataTemplate>
и создайте конвертер, который изменяет видимость в зависимости от типа
public class ViewVisibilityConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (((ViewModelBase)value).DisplayName.Equals((string)parameter))
return Visibility.Visible;
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}