えムナウ Blog

えムナウ の なすがまま

目次

Blog 利用状況

ニュース


follow mnow at http://twitter.com


えムナウのプログラミングのページ

INETAJ

書庫

日記カテゴリ

ギャラリ

MVVM パターン View のコード自体を作るのをやめてしまおう

MVVM パターンで View のビヘイビアで処理することによってコードビハインドを書かずに済まそうという動きがある。

そうすると View の XAML と一緒に View1.cs にこんなコードが残ってしまう。

        public partial class View1 : UserControl
        {
                public View1()
                {
                        this.InitializeComponent();
                }
        }

潔くこのコードも捨ててしまおう。

XAMLは全て App.Xaml か ResourceDictionary.Xaml に書く。
ResourceDictionary が増えていってもマージすれば問題ない。

<Application x:Class="DataTemplateSample.App"
             xmlns=”http://schemas.microsoft.com/winfx/2006/xaml/presentation
             xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml
             xmlns:local="clr-namespace:DataTemplateSample"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <DataTemplate DataType="{x:Type local:Sample1ViewModel}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}"/>
                <TextBlock Text="" />
                <TextBlock Text="{Binding Age}"/>
                <TextBlock Text="" />
            </StackPanel>
        </DataTemplate>
        <DataTemplate DataType="{x:Type local:Sample2ViewModel}">
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Name}"/>
                <TextBlock Text="" />
                <TextBlock Text="{Binding Age}"/>
                <TextBlock Text="" />
            </StackPanel>
        </DataTemplate>
    </Application.Resources>
</Application>

namespace DataTemplateSample
{
    public class Sample1ViewModel : ViewModelBase
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    public class Sample2ViewModel : ViewModelBase
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }
    public class MainViewModel : ViewModelBase
    {
        public Sample1ViewModel Sample1ViewModel { get; set; }
        public Sample2ViewModel Sample2ViewModel { get; set; } 
        public MainViewModel()
        {
            Sample1ViewModel = new Sample1ViewModel() { Name = "", Age = 28 };
            Sample2ViewModel = new Sample2ViewModel() { Name = "", Age = 28 };
        }
    }
}

<Window x:Class="DataTemplateSample.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation
        xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml
        xmlns:local="clr-namespace:DataTemplateSample"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:MainViewModel x:Key="MainViewModel"/>
    </Window.Resources>
    <Grid DataContext="{StaticResource ResourceKey=MainViewModel}">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <ContentControl Content="{Binding Sample1ViewModel}"/>
        <ContentControl Grid.Row="1" Content="{Binding Sample2ViewModel}"/>
    </Grid>
</Window>

MainWindow.cs は残ってしまうがメインウィンドウなので何かに使うかもしれない。

こうしてどうせ使わないコードビハインドは追いだせるのである。
Visual Studio で XAML のデザインが確認できないという問題はある。
しかし Expression Blend ではリソースとして確認し普通にデザインできるのでビヘイビアも含めてデザインはBlendで行うという人には全然問題にならないのである。

投稿日時 : 2010年11月9日 22:23

コメントを追加

# MVVM パターン View のコード自体を作るのをやめてしまおう その2 2010/11/10 20:44 えムナウ Blog

MVVM パターン View のコード自体を作るのをやめてしまおう その2

タイトル
名前
URL
コメント