IBackground 라는 interface를 선언 한 뒤 IBackground 블럭 내에서 반환타입이 void 이며 파라미터로 Brush 타입의 인자를 받는다는 메소드의 형식만 선언하게 됩니다.
이 경우 IBackground 를 상속받는 class는 반드시 Changed 메소드를 구현해야 하며, 상속받은 class 는 IBackground 타입으로 형변환이 가능하고, 그 경우 Changed 메소드가 노출되게 됩니다.
바로, 다음의 3가지 사항입니다.public partial class BlueUserControl :
UserControl,
IBackground
{
public BlueUserControl()
{
InitializeComponent();
}
#region IOption Members
public void Changed(Brush _brush)
{
this.LayoutRoot.Background = _brush;
}
#endregion
}
public partial class RedUserControl :
UserControl,
IBackground
{
public RedUserControl()
{
InitializeComponent();
}
#region IOption Members
public void Changed(Brush _brush)
{
this.LayoutRoot.Background = _brush;
}
#endregion
<UserControl x:Class="ObserverPattern.MainPage"
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:uc="clr-namespace:ObserverPattern.UserControls"
mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
<Grid x:Name="LayoutRoot" Background="Black">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<uc:BlueUserControl x:Name="blueUserControl" Grid.Column="0"/>
<uc:RedUserControl x:Name="redUserControl" Grid.Column="1"/>
<Button x:Name="OptionChangeButton" Content="Changed" Height="30"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Margin="10,10,0,0"
Click="OptionChangeButton_Click"/>
</Grid>
</UserControl>
public partial class MainPage :
UserControl
{
public MainPage()
{
InitializeComponent();
}
IBackground option;
public void optionChange()
{
SolidColorBrush brush = new SolidColorBrush(Colors.Blue);
option = this.redUserControl;
option.Changed(brush);
brush = new SolidColorBrush(Colors.Red);
option = this.blueUserControl;
option.Changed(brush);
}
private void OptionChangeButton_Click(object sender, RoutedEventArgs e)
{
this.optionChange();
}
}
Changed 버튼을 클릭 시, optionChanged 메소드가 실행 됩니다.