KatsuYuzuのブログ

.NET の開発をメインとした日記です。

.NETで始めるプログラミング #MVPComCamp #clrh93

MVP ComCamp の札幌会場で「.NETで始めるプログラミング」というタイトルでお話させていただきました。

札幌会場はいつも高評価なu-calaさんです。

f:id:KatsuYuzu:20150131165814j:plain:h200
そしてCLR/H恒例のおやつももちろん。
f:id:KatsuYuzu:20150131143438j:plain:h200

資料

.NETで始めるプログラミング
紹介しましたWeb(ASP.NET)とデスクトップアプリ(WPF)、さらには他のセッション、すべてVisual Studio Communityで無料で出来るので是非!

補足

WPFのデモのコード。

<Button Name="ddd"
    Content="Button"
        HorizontalAlignment="Left"
        Margin="87,84,0,0"
        VerticalAlignment="Top"
        Width="302"
        Height="73"
        Background="#FFC61A1A"
        />
void ddd_Click(object sender, RoutedEventArgs e)
{
    var 死亡フラグ = true;

    if (!死亡フラグ)
    {
        MessageBox.Show("こんにちわ");
    }
    else
    {
        MessageBox.Show("ぶっとばしてさしあげますわ");
    }
}

各名前がひどいのはおいといて、HTMLの時にCSS使って構造とデザインは分離しようと言っていたのに反してるのと、処理とデザインを分離しようと言っていたのにも反してますね。ひどい話だwHTML,CSSやASP.NETの話の時のように分離してみましょう。
まずは、デザイン要素であるボタンから処理を引き離します。下記のように処理を定義しました。

public class MainWindowViewModel
{
    public MainWindowViewModel()
    {
        // ICommand の実装は割愛
        GreetCommand = new Command(_ => Greet(), _ => true);
    }

    public ICommand GreetCommand { get; set; }

    void Greet()
    {
        var 死亡フラグ = true;

        if (!死亡フラグ)
        {
            MessageBox.Show("こんにちわ");
        }
        else
        {
            MessageBox.Show("ぶっとばす");
        }
    }
}

これをデザイン要素から購読することで、お互いに変更があった時にも影響を受ける心配がないですね。ついでにデザインもCSSと同じ要領でスタイル定義に分離しています。

<Window.DataContext>
    <wpfApplication1:MainWindowViewModel />
</Window.DataContext>
<Window.Resources>
    <Style x:Key="GreetButton"
           TargetType="Button">
        <Setter Property="HorizontalAlignment"
                Value="Center" />
        <Setter Property="VerticalAlignment"
                Value="Center" />
        <Setter Property="Background">
            <Setter.Value>
                <SolidColorBrush Color="Red" />
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<Grid>
    <TextBlock Text="aaaaaa" />
    <Button Content="Button"
            Command="{Binding GreetCommand}"
            Style="{DynamicResource GreetButton}" />
</Grid>

終わりに

幸か不幸か、会場の皆さんがほぼ開発者でしたので臨機応変に内容変えれたら良かったのかも。普通にハローワールドデモをしたうえにとちってたwこの補足まで落ち着いてやれれば時間通りだったかな?
朝から晩まで文字通り1日のイベントでしたが、とても楽しかったです。是非またよろしくおねがいします!