CheckBox と CLRオブジェクト (C#、WPF)

WPFの練習に、CheckBoxとCLRオブジェクトをデータバインディングする方法を確認します。「Expression Blend」を使って行うことを前提に以下では記載します。

1.Blendで新規プロジェクトと画面を作る

まずBlendで新規プロジェクトを作成し、CheckBoxがある画面を作成します。
CheckBox と DataContext 間のバインドテストですが、DataContext と CheckBox がバインドできていることを確認するためにもう一つCheckBoxを加え、下記のような画面を作成します。

バインディングするために各部品は名前が定義されている必要があります。各CheckBoxに名前をつけてください。
下図の例では checkBox1, checkBox2 と名前をつけました。


2.CLRオブジェクトを定義する

次にバインディングする CLRオブジェクト 側を定義します。

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;

namespace test_Binding_02
{
    public class Status
    {
        public bool IsChecked {
            set; get;
        }
    }
        
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.InitializeComponent();

            // オブジェクト作成に必要なコードをこの点の下に挿入します。
            DataContext = new {
                Status = new Status(),
            };
        }
    }
}

3.一旦「F5」によりコンパイル&実行

一旦F5を押してコンパイル&実行します。正しくコンパイルされることを確認してください。

4.CheckBox と DataContext をバインディング

CheckBox の IsChecked と、上記の DataContext.Status.IsChecked をバインディングします。





「データ バインドの作成」ダイアログが表示されたら、「データ コンテキスト」タブを押して
「カスタムパス式の使用」をチェックし、右側に ”Status.IsChecked” と入力します。


"CheckBox2"についても同じ内容を反復します。

以上でお終い。
以上の作業の結果、XAML は下図のようになっているはずです。

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:test_Binding_02" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
    x:Class="test_Binding_02.MainWindow"
    x:Name="Window"
    Title="MainWindow"
    Width="190" Height="137">

    <Grid x:Name="LayoutRoot">
        <CheckBox x:Name="checkBox1" Content="CheckBox1" Margin="33,22,0,0" 
            VerticalAlignment="Top" HorizontalAlignment="Left" IsChecked="{Binding Status.IsChecked}"/>
        <CheckBox x:Name="checkBox2" Content="CheckBox2" Margin="33,52,0,0"
            VerticalAlignment="Top" HorizontalAlignment="Left" IsChecked="{Binding Status.IsChecked}"/>
    </Grid>
</Window>

5.完成

完成です。いずれかのチェックボックスをマウスクリックすると他方の✔も同時に変化します。

サンプルプログラム ダウンロード (開発:Expression Blend 4)


記載: 2012年10月14日 木下英俊