我有以下视图模型:
public class DocumentViewModel : ViewModelBase
{
public virtual string TabHeader
{
get { return "Document"; }
}
private ObservableCollection<DATA> data;
/// <summary>
/// Source for Grid
/// </summary>
public ObservableCollection<DATA> Data
{
get { return data; }
set
{
data = value;
RaisePropertyChanged("Data");
}
}
// ...... a lot of properties and methods ....
}
我想ProcurementViewModel
继承DocumentViewModel
:
public class ProcurementViewModel : DocumentViewModel
{
public override string TabHeader
{
get { return "Procurement"; }
}
}
请注意,我只覆盖了一个属性。其余属性应取自基本 ViewModel。
现在我想通过使用这个 DataTemplate 来显示它:
<DataTemplate DataType="{x:Type vm:ProcurementViewModel}">
<views:DocumentView />
</DataTemplate>
但没有显示数据。TabHeader 绑定到 TabControl 的 Header - 它显示来自基本 ViewModel 的值。
如果我指定 DataType{x:Type vm:DocumentViewModel}
一切正常。
这是 DocumentView 的一部分,我在其中使用 DataTemplates:
<Grid>
<telerik:RadTabControl Name="rtcTabs" ItemsSource="{Binding Tabs}" SelectedItem="{Binding SelectedTab}" SelectedIndex="1">
<telerik:RadTabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding TabHeader}"/>
</DataTemplate>
</telerik:RadTabControl.ItemTemplate>
<telerik:RadTabControl.Resources>
<DataTemplate DataType="{x:Type vm:DashboardViewModel}">
<views:DashboardView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:ProcurementViewModel}">
<views:DocumentView />
</DataTemplate>
</telerik:RadTabControl.Resources>
</telerik:RadTabControl>
</Grid>
这是 DocumentView.xaml 的一部分:
<UserControl x:Class="DMRS.Views.DocumentView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:vm="clr-namespace:DMRS.ViewModels;assembly=DMRS.ViewModels"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="358" d:DesignWidth="582" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">
<!--<UserControl.DataContext>
<vm:DocumentViewModel/>
</UserControl.DataContext>-->
<UserControl.Resources>
<Style x:Key="stlDocViewCombobox" TargetType="{x:Type telerik:RadComboBox}">
<Setter Property="OpenDropDownOnFocus" Value="True"/>
</Style>
</UserControl.Resources>
<Grid>
<telerik:RadGridView AutoGenerateColumns="False" Name="rgvData"
ItemsSource="{Binding Data}"
SelectedItem="{Binding SelectedData}">
<telerik:RadGridView.Resources>
..................................