2013年01月18日

[C# WPF]DataTriggerを使う

今回からTriggerについて解説します。
Triggerを使うとxamlに簡単なロジックを記述できるようになります。

今回紹介するDataTriggerは
Bindingソースの値の変化に合わせて表示を変化させるのに使います。

サンプルを見てみます。
xamlです。

<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal">
<Button Content="実行" Height="23" Margin="5" Click="Execute_Click">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="True"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsRunning}" Value="True">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button Content="停止" Height="23" Margin="5" Click="Stop_Click">
<Button.Style>
<Style TargetType="Button">
<Setter Property="IsEnabled" Value="False"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsRunning}" Value="True">
<Setter Property="IsEnabled" Value="True"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
</Grid>


ソースです。

public partial class MainWindow : Window, INotifyPropertyChanged
{
private bool isRunning = false;
public bool IsRunning
{
get { return isRunning; }
set
{
isRunning = value;
OnPropertyChanged("IsRunning");
}
}

public MainWindow()
{
InitializeComponent();

this.DataContext = this;
}

private void Execute_Click(object sender, RoutedEventArgs e)
{
IsRunning = true;
}

private void Stop_Click(object sender, RoutedEventArgs e)
{
IsRunning = false;
}

public event PropertyChangedEventHandler PropertyChanged = (s, e) => { };

private void OnPropertyChanged(string name)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}


xamlでは実行ボタンと停止ボタンを配置しています。
それぞれのボタンのクリックイベントはソースに書いてありますが、
メンバのIsRunningプロパティを切り替えているだけです。

xamlの2つのButtonのStyle部分を見てください。
TriggerはStyleのTriggersの内部に記述します。

DataTriggerはBindingのプロパティ値がValueになった時に内部に記述したSetterを実行します。
プロパティ値がValue以外の場合はStyle.Triggersの外に記述してあるSetterを実行します。
Style.Triggersの外にSetterを記述しない場合はデフォルト値になります。

上記サンプルの実行ボタンは
IsRunningがTrueの時にボタンのIsEnabledがFalseになります。
IsRunningがFalseの時はIsEnabledがTrueになります。
停止ボタンは実行ボタンの逆で
IsRunningがTrueの時にボタンのIsEnabledがTrueになります。
IsRunningがFalseの時はIsEnabledがFalseになります。

実行してみましょう。
2.jpg

実行ボタンを押すとボタンの有効状態が反転します。

1.jpg

停止ボタンを押すと再度ボタンの有効状態が反転します。

Triggerによって画面の動作をxamlに記述できるようになり、
ソースは画面制御を意識する必要がなくなります。


posted by cw at 10:00| Comment(0) | Trigger | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。