I have a PageViewModelBase
where children need to implement 3 methods and everything works as intended, and as such, I'd like to create PageViewBase
and have its children implement two simple non-generic things (namely: data context binding and data grid columns).
I've come across this post and tried to create the base xaml accordingly (code below), but despite my different approaches, I'm unable to create the child view. I've tried <baseView:PageViewBase>
being the only element in xaml as well as embedding it into another UserControl, but both approaches fail.
Base view (a lot of noise code omitted, added example parts which child view has to implement for visualization):
<UserControl x:Class="WPFapp.Views.Base.PageViewBase">
<UserControl.Resources>
<!--<DataTemplate DataType="{x:Type localVM:HardwareViewModel}">
<local:HardwareView/>
</DataTemplate>-->
<localHelpers:DateTimeConverter x:Key="dateTimeConverter" />
<localHelpers:StatusColorConverter x:Key="statusColorConverter" />
</UserControl.Resources>
<UserControl.InputBindings> </UserControl.InputBindings>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="1*" MinHeight="25" />
<RowDefinition Height="15*" />
</Grid.RowDefinitions>
<ToolBarPanel Grid.Row="0" Orientation="Horizontal">
</ToolBarPanel>
<DataGrid ItemsSource="{Binding ItemsList}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" Grid.Row="1" AutoGenerateColumns="False" SelectionMode="Single">
<DataGrid.ContextMenu> </DataGrid.ContextMenu>
<DataGrid.InputBindings> </DataGrid.InputBindings>
<DataGrid.Resources> </DataGrid.Resources>
<DataGrid.RowStyle> </DataGrid.RowStyle>
<ContentPresenter ContentSource="Content"/>
<!--<DataGrid.Columns>
<DataGridTextColumn Header="LastModifiedBy" Binding="{Binding LastModifiedBy}" />
</DataGrid.Columns>-->
</DataGrid>
</Grid>
</UserControl>
Child view:
<UserControl x:Class="WPFapp.Views.HardwareView">
<UserControl.Resources>
<DataTemplate DataType="{x:Type localVM:HardwareViewModel}">
<local:HardwareView/>
</DataTemplate>
</UserControl.Resources>
<baseView:PageViewBase>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}" />
<DataGridTextColumn Header="Type" Binding="{Binding Type}" />
<DataGridTextColumn Header="Label" Binding="{Binding Label}" />
<DataGridTextColumn Header="Description" Binding="{Binding Description}" />
<DataGridTextColumn Header="LastModifiedBy" Binding="{Binding LastModifiedBy}" />
<DataGridTextColumn Header="LastModifiedAt" Binding="{Binding LastModifiedAt, Converter={StaticResource dateTimeConverter}}" />
</DataGrid.Columns>
</DataGrid>
</baseView:PageViewBase>
</UserControl>
The above child's xaml code is the best I've managed so far, but it ends up displaying columns only (so no toolbar from base, for example) and it does not see UserControl.Resources
from base view. How do I make it work?