Как сделать wpf-binding контрола в Grid другого контрола?
От: lesovick Россия  
Дата: 11.01.18 07:53
Оценка:
Приветствую.

Для простоты сформулирую сферическую задачу в вакууме. Пусть есть 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"); } 
        }

Буду благодарен за совет.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.