Prismを利用してデータバインディングします。
using Prism.Commands; using Prism.Mvvm; using System; namespace WpfPrismMvvm { public class MainWindowViewModel : BindableBase { /// <summary> /// チェックボックス状態変化を捕捉した際に実行するコマンド /// </summary> public DelegateCommand<EventArgs> CheckBoxAction { get; private set; } /// <summary> /// チェックボックスの状態表示用テキスト /// </summary> private string _checkBoxStatus; public string CheckBoxStatus { get { return _checkBoxStatus; } set { SetProperty(ref _checkBoxStatus, value); } } private bool _checkBox1; public bool CheckBox1 { get { return _checkBox1; } set { SetProperty(ref _checkBox1, value); } } private bool _checkBox2; public bool CheckBox2 { get { return _checkBox2; } set { SetProperty(ref _checkBox2, value); } } private bool _checkBox3; public bool CheckBox3 { get { return _checkBox3; } set { SetProperty(ref _checkBox3, value); } } public MainWindowViewModel() { CheckBoxAction = new DelegateCommand<EventArgs>(x => checkBoxAction(x)); CheckBox1 = false; CheckBox2 = false; CheckBox3 = false; } /// <summary> /// チェックされたチェックボックスの名前をCheckBoxStatusに記入する /// </summary> /// <param name="e"></param> private void checkBoxAction(EventArgs e) { string msg = string.Empty; if (CheckBox1) { msg += "CheckBox1 "; } if (CheckBox2) { msg += "CheckBox2 "; } if (CheckBox3) { msg += "CheckBox3 "; } CheckBoxStatus = msg; } } }
チェックボックスの状態変化として、Checked/Uncheckedイベントの捕捉、Clickイベントの捕捉、コマンドの直接割り当てが可能です。
<Window x:Class="WpfPrismMvvm.MainWindow" 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:i="http://schemas.microsoft.com/expression/2010/interactivity" mc:Ignorable="d" Title="MainWindow" Height="300" Width="450"> <StackPanel> <StackPanel Orientation="Horizontal" Margin="10"> <!--チェックイベントを捕捉してコマンドを実行する--> <CheckBox Content="CheckBox1" IsChecked="{Binding CheckBox1}" Margin="10"> <i:Interaction.Triggers> <i:EventTrigger EventName="Checked"> <i:InvokeCommandAction Command="{Binding CheckBoxAction}" /> </i:EventTrigger> <i:EventTrigger EventName="Unchecked"> <i:InvokeCommandAction Command="{Binding CheckBoxAction}" /> </i:EventTrigger> </i:Interaction.Triggers> </CheckBox> <!--チェックボックスにコマンドを割り当てて実行する--> <CheckBox Content="CheckBox2" IsChecked="{Binding CheckBox2}" Margin="10" Command="{Binding CheckBoxAction}" > </CheckBox> <!--Clickイベントを捕捉してコマンドを実行する--> <CheckBox Content="CheckBox3" IsChecked="{Binding CheckBox3}" Margin="10" > <i:Interaction.Triggers> <i:EventTrigger EventName="Click"> <i:InvokeCommandAction Command="{Binding CheckBoxAction}" /> </i:EventTrigger> </i:Interaction.Triggers> </CheckBox> </StackPanel> <StackPanel Orientation="Horizontal" Margin="10"> <TextBlock Text="checked:" FontSize="16" Margin="10"/> <TextBlock Text="{Binding CheckBoxStatus}" FontSize="16" Margin="10"/> </StackPanel> </StackPanel> </Window>
using System.Windows; namespace WpfPrismMvvm { /// <summary> /// MainWindow.xaml の相互作用ロジック /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); MainWindowViewModel vm = new MainWindowViewModel(); this.DataContext = vm; } } }