【发布时间】:2018-05-15 14:38:55
【问题描述】:
我将TabViewModel 项目的集合绑定到TabControl。其中每一个都有一个标题string 属性和我自己的自定义类型BaseTabContentViewModel 的内容属性,这是每个实际选项卡数据视图模型实现的抽象类。例如ValuationTabViewModel 是BaseTabContentViewModel 的子类。
我将新的 TabViewModel 添加到 Observable<TabViewModel> 以供 TabControl 提取,它会显示在 UI 中。我已经为选项卡控件和标题的布局覆盖了样式模板,它们可以正常工作。唯一的问题是内容没有根据它的类型在我的资源字典中找到模板,它只显示视图模型的完整限定类名称,表明它没有找到这个类的默认模板。
为什么没有显示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>
还有我的 Tab 项 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;
}
}
【问题讨论】: