Я связываю коллекцию TabViewModel
предметов с TabControl
.Каждый из них имеет свойство заголовка string
и свойство содержимого моего собственного пользовательского типа BaseTabContentViewModel
, абстрактный класс, который реализует каждая фактическая модель представления данных вкладки.Например, ValuationTabViewModel
, который является подклассом BaseTabContentViewModel
.
. Я добавляю новый TabViewModel
к Observable<TabViewModel>
, чтобы TabControl
подобрал его, и это отображается в пользовательском интерфейсе.Я переопределил шаблоны стилей для макета вкладки и заголовка, которые работают нормально.Единственная проблема в том, что контент не находит шаблон в моем словаре ресурсов на основе его типа, он просто отображает полное имя класса модели представления, показывая, что не находит шаблон по умолчанию для этого класса.
Почему не отображается ValuationTabViewModel
, для которого ниже указана табличка с данными для этого типа?
Моя модель основного вида.
public ObservableCollection<TabViewModel> DetailTabs { get; }
var valuationTab = new TabViewModel(DetailTabConstants.ValuationTab, new ValuationTabViewModel(_eventAggregator, _errorNotifier, _windsorContainer));
DetailTabs = new ObservableCollection<TabViewModel> { valuationTab };
Основной XAML
<TabControl Margin="0,-2,0,0" x:Name="SelectionTabs" Style="{StaticResource DetailTabControl}" ItemsSource="{Binding DetailTabs}"
SelectedValue="{Binding SelectedTab, Mode=TwoWay}" ItemContainerStyle="{StaticResource DetailTabItem}">
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Header}" />
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Content}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
Шаблон стиля содержимого, который я хочу использовать
<DataTemplate x:Key="ValuationTabTemplate" DataType="{x:Type detailTabs1:ValuationTabViewModel}" >
<detailTabs:ValuationTab Margin="0,10,0,10" />
</DataTemplate>
ИМоя закладка Элемент ViewModel класс
public class TabViewModel : ViewModelBase
{
private string _header;
private BaseTabContentViewModel _content;
public string Header
{
get => _header;
set
{
_header = value;
RaisePropertyChanged(nameof(Header));
}
}
public BaseTabContentViewModel Content
{
get => _content;
set
{
_content = value;
RaisePropertyChanged(nameof(Content));
}
}
public TabViewModel(string header, BaseTabContentViewModel viewModel)
{
Header = header;
Content = viewModel;
}
}