У меня есть общее представление, в котором я «внедряю» какое-то конкретное представление в содержащийся ContentControl
(я создал эту функцию с помощью этой помощи -> help 1 - помощь 2).
Основной источник моих взглядов таков:
MyGenericView.xaml
<UserControl x:Class="MyNS.MyGenericView"
... >
<UserControl.Resources>
<vml:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</UserControl.Resources>
<Grid DataContext="{Binding MyGenericViewModel, Source={StaticResource Locator}}">
<ContentControl Content="{Binding MyObject}" />
</Grid>
</UserControl>
CustomerView.xaml
<UserControl x:Class="AnotherNS.CustomerView"
... >
<Grid>
<StackPanel Orientation="Vertical">
<Label Content="Description" />
<TextBox Text="{Binding description}" />
</StackPanel>
</Grid>
</UserControl>
Crud.xaml
: словарь ресурсов, который я использую, чтобы «решить», какое представление показывать, в зависимости от объекта DataType
из MyObject
, предоставляемого общим представлением.
<ResourceDictionary ... >
<DataTemplate DataType="{x:Type mo:Customer}">
<vw:CustomerView />
</DataTemplate>
<DataTemplate DataType="{x:Type mo:Product}">
<vw:ProductView />
</DataTemplate>
...
</ResourceDictionary>
Это работает нормально. Я могу управлять MyObject
через "конкретное" представление (клиент, продукт и т. д.).
Что ж. Это моя проблема:
Все конкретные представления имеют свои собственные ViewModels и, конечно же, управляют данными соответствующих представлений. Но я не знаю (в модели представления), с каким объектом (MyObject) я работаю, потому что общее представление предоставляет его конкретному представлению, а не модели представления.
Есть ли способ сообщить ViewModels конкретных представлений об объекте, который "управляет" представлением?