Пока ваш пользовательский элемент управления содержится на главной странице, он будет наследовать модель представления основных страниц. Это значение по умолчанию, и оно применяется, если вы явно не измените контекст данных с помощью привязки данных или кода.
Если ваш пользовательский элемент управления привязывается к своей собственной модели представления, вы можете позволить модели основного представления содержать экземпляр модели дочернего представления и предоставлять ее через открытое свойство. Теперь вы можете установить контекст данных вашего пользовательского элемента управления, привязав свойство DataContext к свойству в модели основного представления.
Наконец, если ваша дочерняя модель представления имеет ссылку на модель основного представления, то они смогут общаться по мере необходимости.
Edit:
Я попробую настроить простой пример:
Первые модели просмотра:
public class MainPageViewModel
{
public MainPageViewModel()
{
ChildViewModel = new ChildViewModel(this);
}
public ChildViewModel {get; private set; }
public ICommand OkCommand { get { // return the command here }}
}
public class ChildViewModel
{
private MainPageViewModel _parentViewModel;
public ChildViewModel(MainPageViewModel parentViewModel)
{
_parentViewModel = parentViewModel;
}
// Returns the command from the main page view model
public ICommand OkCommand { get { return _parentViewModel.OkCommand; } }
// Other properties as well
}
Здесь у нас есть модель основного вида, которая имеет дочернюю модель вида в качестве свойства. Модель дочернего представления предоставляет OkCommand, которая возвращает значение из модели основного представления.
Теперь на своей главной странице xaml вы можете делать следующее:
<uc:MyUserControl DataContext="{Binding ChildViewModel}" />
Здесь вы вставляете свой пользовательский элемент управления и задаете его контекст данных для модели представления дочернего пользовательского элемента управления.