久々に使ってみるとかなり忘れてます...
コマンドについてメモです
"ボタンを押すとコマンドを実行して表示する"というプログラムを作ってみます
以前、メニューについて調べた際にもコマンドは使っていますが
内容についてはほとんど触れていませんでした
コマンドはデータバインドのゲッターとして実装し、
DelegateCommandのオブジェクトをreturnする模様です
newした際のdelegateは
- Execute
- CanExecute
となります
では実装してみます
例によってPrismを使っていますので
参照設定として "Microsoft.Practices.Prism"が必要になります
まずは例によって、ViewのDataContextにViewModelを設定します
namespace CommandTest_130407
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MainWindowViewModel();
}
}
}
View側にはコントロールを配置します
<Window x:Class="CommandTest_130407.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<TextBlock Text="{Binding Text}" />
<Button Command="{Binding ButtonCommand}" Content="押すとテキストが変わるよ!" />
</StackPanel>
</Grid>
</Window>
ViewModel側には
/**
* ボタンを押すとカウントが上がるだけのプログラム
* '13.04.07
*
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
using Microsoft.Practices.Prism.ViewModel;
using Microsoft.Practices.Prism.Commands; // 追加
namespace CommandTest_130407
{
public class MainWindowViewModel : NotificationObject
{
int _count = 0;
string _text;
/// <summary>
/// テキストのデータバインド
/// </summary>
public string Text
{
get { return _text; }
set
{
_text = value;
RaisePropertyChanged(() => Text);
}
}
/// <summary>
/// コマンドのデータバインド
/// コマンドはデータバインドのゲッターとして実装するみたい
/// </summary> private DelegateCommand _buttonCommand;
public DelegateCommand ButtonCommand
{
get
{
return _buttonCommand ?? (_buttonCommand = new DelegateCommand(
() =>
{ // Execute
_text = string.Format("ボタン押下 : {0}回目", ++_count);
RaisePropertyChanged(() => Text);
},
() =>
{ // CanExecute
return true;
}
));
}
}
}
}
これでボタンを押すとテキストのカウントが上がるプログラムの実装ができました
0 件のコメント:
コメントを投稿