목적
NonViewModel을 서로 다른 View에 보일 수 있도록 합니다.
1. NonViewModel - OneView에 연결
PersonModel.cs
namespace Caliburn.Micro.Basic.Project.Models
{
public class PersonModel
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string Phone { get; set; }
}
}
NonView_ViewModel.cs
namespace Caliburn.Micro.Basic.Project.ViewModels
{
public class NonView_ViewModel
: Screen
{
private PersonModel _model;
public NonView_ViewModel()
{
_model = new PersonModel();
_model.Id = 1;
_model.Name = "Caliburn.Micro";
_model.Address = "...";
_model.Phone = "111";
}
public int Id
{
get { return _model.Id; }
set
{
_model.Id = value;
NotifyOfPropertyChange(() => Id);
}
}
public string Name
{
get { return _model.Name; }
set
{
_model.Name = value;
NotifyOfPropertyChange(() => Name);
}
}
public string Address
{
get { return _model.Address; }
set
{
_model.Address = value;
NotifyOfPropertyChange(() => Address);
}
}
public string Phone
{
get { return _model.Phone; }
set
{
_model.Phone = value;
NotifyOfPropertyChange(() => Phone);
}
}
}
}
OneView.xaml
<UserControl x:Class="Caliburn.Micro.Basic.Project.Views.OneView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Caliburn.Micro.Basic.Project.Views"
Background="SlateBlue"
mc:Ignorable="d"
d:DesignHeight="450"
d:DesignWidth="800">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0"
Grid.Column="1"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="아이디" />
<TextBlock Grid.Row="1"
Grid.Column="1"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="이름" />
<TextBlock Grid.Row="2"
Grid.Column="1"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="주소" />
<TextBlock Grid.Row="3"
Grid.Column="1"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="전번" />
<TextBox Grid.Row="0"
Grid.Column="2"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="{Binding Id}" />
<TextBox Grid.Row="1"
Grid.Column="2"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="{Binding Name}" />
<TextBox Grid.Row="2"
Grid.Column="2"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="{Binding Address}" />
<TextBox Grid.Row="3"
Grid.Column="2"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="{Binding Phone}" />
</Grid>
</UserControl>
##위 내용이 시현 윈도우
ShellViewModel.cs
namespace Caliburn.Micro.Basic.Project.ViewModels
{
/// <summary>
/// The shell view model.
/// </summary>
public class ShellViewModel : Conductor<object>
{
/// <summary>
/// Initializes a new instance of the <see cref="ShellViewModel"/> class.
/// </summary>
public ShellViewModel()
{
ContentControl=IoC.Get<NonView_ViewModel>();
//??어떻게 할당해야 View를 선택적으로 할당가능한지...
}
private NonView_ViewModel _contentControl;
public NonView_ViewModel ContentControl
{
get { return _contentControl; }
set
{
_contentControl = value;
NotifyOfPropertyChange(() => ContentControl);
}
}
}
}
ShellView.xaml
<Window x:Class="Caliburn.Micro.Basic.Project.Views.ShellView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Caliburn.Micro.Basic.Project.Views"
mc:Ignorable="d"
Title="ShellView" Height="450" Width="800">
<Grid>
<ContentControl x:Name="ContentControl" />
</Grid>
</Window>
- NonView_ViewModel을 AnotherView에 연결
AnotherView.xaml
<UserControl x:Class="Caliburn.Micro.Basic.Project.Views.AnotherView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:Caliburn.Micro.Basic.Project.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Grid>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="2"
Grid.Column="1"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="아이디" />
<TextBox Grid.Row="2"
Grid.Column="2"
FontSize="20"
VerticalAlignment="Center"
TextAlignment="Center"
Text="{Binding Id}" />
</Grid>
</Grid>
</UserControl>
##원하는 결과
1.OneView에 연결 시…
2.AnotherVIew에 연결 시…
참고로 해당관련 내용이 Prism으로 강의가 있더라고요.
참고영상
Caliburn.Micro로는 없네요.