Приветствую.
Для простоты сформулирую сферическую задачу в вакууме. Пусть есть 2 различных wpf-контрола и одно окно с гридом, призванное отображать в себе один из контролов. Каждая форма в отдельности спроектирована по паттерну MVVM (видно по пространствам имён ниже). Пусть контролы выглядят так:
<UserControl ...>
<Grid>
<Label Content="It is my massage1111111111" HorizontalAlignment="Left" Margin="77,115,0,0" VerticalAlignment="Top"/>
</Grid>
</UserControl>
<UserControl ...>
<Grid>
<Label Content="It is my massage2222222222" HorizontalAlignment="Left" Margin="77,115,0,0" VerticalAlignment="Top"/>
</Grid>
</UserControl>
Отобразить их в окне формы можно разными способами. Один из них такой (нужный контрол раскомментировать):
<Window ...
xmlns:form1="clr-namespace:ClassLibrary1.Form1.ViewControl"
xmlns:form2="clr-namespace:ClassLibrary1.Form2.ViewControl">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid x:Name="gMyGrid" Grid.Row="0" Grid.Column="0">
<!--<form1:ViewControlClass Grid.Row="0" Grid.Column="0"/>-->
<!--<form2:ViewControlClass Grid.Row="0" Grid.Column="0"/>-->
</Grid>
</Grid>
</Window>
Но мне хотелось бы сделать это другим способом: передавать эти контролы в виде некоей привязываемой переменной (назовём её, например, MyControl). Как-то примерно так чтобы это выглядело:
<Window ...>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid x:Name="gMyGrid" Grid.Row="0" Grid.Column="0" DataContext = "{Binding Path=MyControl}/>
</Grid>
</Window>
Подскажите, пожалуйста, как правильно привязать переменную и какой у неё должен быть при этом тип с коде C#? Пробовал объявлять её как-то так во ViewModelClass для третьей формы (которая Window), но этот вариант не работает:
private ClassLibrary1.Form1.ViewModelLib.ViewModelClass myControl;
public ClassLibrary1.Form1.ViewModelLib.ViewModelClass MyControl
{
get { return myControl; }
set { gMyGridControl = value; NotifyPropertyChanged("myControl"); }
}
Буду благодарен за совет.