Что вам нужно сделать, это использовать ContentControl
на главном экране, чтобы отобразить свойство ConnectedSystem
модели основного вида.Используя ContentControl
, вы будете включены в процесс привязки модели представления, и будут применены правила привязки модели представления.Таким образом, вы хотите, чтобы ваше свойство (используя реализацию Caliburn по умолчанию) имело тип ConnectedSystemViewModel
и имело представление с именем ConnectedSystemView
.Затем в представлении, используемом для отображения родительского элемента, вы хотите ContentControl
с x:Name
, равным ConnectedSystem
(имя свойства ConnectedSystemViewModel. Это приведет к тому, что связыватель модели представления соединит их и выполнит свою обычную работу. ЗдесьВот некоторый код для ясности:
ConnectedSystemView.xaml (пользовательский элемент управления, который соглашения будут использовать при указании ContentControl
в качестве элемента управления для отображения свойства подключенной системы модели основного вида)
<UserControl x:Class="Sample.Views.ConnectedSystemView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Label Grid.Column="0"
Grid.Row="0">PropertyOne Label:</Label>
<TextBox x:Name="PropertyOne"
Grid.Column="1"
Grid.Row="0"></TextBox>
<TextBlock Grid.Column="0"
Grid.Row="1">PropertyTwo Label:</TextBlock>
<TextBox x:Name="PropertyTwo"
Grid.Column="1"
Grid.Row="1"></TextBox>
<!-- repeat the TextBlock, TextBox pair for the remaining
properties three through ten -->
</Grid>
</UserControl>
ConnectedSystemViewModel.cs (тип свойства ConnectedSystem в вашей модели основного вида)
namespace Sample.ViewModels
{
public class ConnectedSystemViewModel : PropertyChangedBase
{
private string _propertyOne;
public string PropertyOne
{
get { return _propertyOne; }
set
{
_propertyOne = value;
NotifyOfPropertyChange(() => PropertyOne);
}
}
// these all need to be as above with NotifyPropertyChange,
// omitted for brevity.
public string PropertyTwo { get; set;}
public string PropertyThree { get; set;}
public string PropertyFour { get; set;}
public string PropertyFive { get; set;}
public string PropertySix { get; set;}
public string PropertySeven { get; set;}
public string PropertyEight { get; set;}
public string PropertyNine { get; set;}
public string PropertyTen { get; set;}
}
}
И в вашем главном представлении определите ContentControl с именем относительно свойства модели основного вида типа ConnectedSystemViewModel
<ContentControl x:Name="ConnectedSystem"></ContentControl>
Если я правильно понимаю ваш вопрос, это все, что вам нужно, чтобы подключиться к стандартным соглашениям Caliburn.Micro. Очевидно, вы добавите свойства 10 ConnectedSystem
в ConnectedSystemViewModel
и соответствующие элементы управления с соответствующими именами для ConnectedSystemView
для завершения реализации.
Таким образом, в вашем основном видевам нужно определить только один ContentControl
для отображения свойства ConnectedSytem (вместо 10 идентичных пользовательских пользовательских элементов управления), и соглашения будут определять тип пользовательского элемента управления, который будет использоваться для заполнения ContentControl
.
ВнутриConnectedSystemView
, который будет вставлен в свойство содержимого ваших основных представлений ContentControl
через соглашения, у вас есть элементы управления, которые вы хотите отобразить в 10 подключенных системных свойствах.