DataTriggerがようやく理解できた話
DataTriggerの使い方(WPF)|Memeplexes
サンプルソースをわかり易く書き直してみたのです。
<Page.DataContext> <ViewModel:Viewmodel/> </Page.DataContext> <Page.Resources> <!--TextBlockのStyleだけどここで定義しないと上手く動かないらしい--> <Style x:Key="style" TargetType="TextBlock"> <Style.Triggers> <DataTrigger Binding="{Binding IsChecked}" Value="true"> <Setter Property="Text" Value="Checked!!"/> </DataTrigger> </Style.Triggers> </Style> </Page.Resources> <StackPanel> <TextBlock Style="{StaticResource style}"/> <!--プロパティの値を変化させるコマンド--> <Button Command="{Binding Path=Change}">押す</Button> </StackPanel>
DataTriggerが何をやってるかと言えば一言で言ってしまえば
プロパティの値が書き換わった瞬間にSetterを呼んでる
ってことになるのですね。
で、見るプロパティの指定は
Binding="{Binding IsChecked}"
で指定
Setterで何を変えるかといえば
そのStyleが適用されてるコントロール
ViewModelのプロパティの値→View
となるわけで。
プロパティの値を変化させる要因は言ってしまえばなんだっていいのです。
ポイントはDataTriggerのターゲットとなるコントロールのStyleにDataTriggerを設定する、
という所かと思います。
で、そのことをわかり易くするために以下のように書き直したんですが
<TextBlock> <TextBlock.Resources> <Style x:Key="style" TargetType="TextBlock"> <Style.Triggers> <DataTrigger Binding="{Binding IsChecked}" Value="true"> <Setter Property="Text" Value="Checked!!"/> </DataTrigger> </Style.Triggers> </Style> </TextBlock.Resources> </TextBlock>
動かない。
INotifyPropertyChanged継承してOnPropertyChangedも呼んでるのに動かない。
バグでしょうか。
そんなわけなのです。