Instead of binding an element to a field's property I changed the DataContext of the element to the required field.
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MainWindowView mainWindowView = new MainWindowView(); var mainWindowViewModel = new MainWindowViewModel(); mainWindowView.DataContext = mainWindowViewModel; mainWindowView.pagerView.DataContext = mainWindowViewModel.pager; mainWindowView.Show(); }
In this example I have a DataGrid and Pager (first, prev, next, last page) below it. The elements of the MainWindowView (including the DataGrid) are binded to properties in the MainWindowViewModel but the pager buttons are binded to the properties of mainWindowViewModel.pager.
MainWindowView:
<DataGrid Name="dgSimple" ItemsSource="{Binding DisplayedUsers}" MaxWidth="200" Grid.Row="0" SelectedItem="{Binding SelectedRow}"></DataGrid> <view:PagerView x:Name="pagerView" Grid.Row="2"/>
PagerView:
<UserControl x:Class="wpf_scroll.View.PagerView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:wpf_scroll.View" mc:Ignorable="d" d:DesignHeight="30" d:DesignWidth="350"> <StackPanel Orientation="Horizontal" Grid.Row="1"> <Label Content="Page size:"/> <TextBox Text="{Binding PageSize}" Width="30" VerticalContentAlignment="Center" HorizontalContentAlignment="Center"></TextBox> <Button Content="First" Command="{Binding FirstPageCommand}"></Button>