私の意見に対して結構反響があったのでこちらも書いておかなければと思い書いておく。
MVVM パターンで VM から VIEW を操作したい
http://blogs.wankuma.com/mnow/archive/2010/09/20/193090.aspx
MVVM パターンで ViewModel から VIEW を操作したいということに対するアメリカでの解決策に近いものは、添付ビヘイビアーだ。
コントロールにちょっとした操作を行うのがその目的である。
Expression Blend において標準の添付ビヘイビアーは以下のようになっている。
また、Microsoft Expression Blend Software Development Kit もあり独自の添付ビヘイビアーも作成できる。
Expression Blend 標準の添付ビヘイビアーは、トリガー、条件、共通プロパティ、その他のプロパティで構成されている。
「トリガー、条件」は共通で PropertyChangedTrigger を使うと ViewModel のプロパティ変更をトリガにでき、条件にも ViewModel のプロパティが使用できる。
各ビヘイビアーで異なるのは共通プロパティ、その他のプロパティ(例はアニメーションのプロパティになっている)で、コントロールにどういう操作を行うかの部分となる。
ちなみに XAML はこんな感じになっている。
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:ic="http://schemas.microsoft.com/expression/2010/interactions"
<i:Interaction.Triggers>
<ic:PropertyChangedTrigger Binding="{Binding ViewModelProperty}">
<i:Interaction.Behaviors>
<ic:ConditionBehavior>
<ic:ConditionalExpression>
<ic:ComparisonCondition LeftOperand="{Binding IntValue}" RightOperand="0"/>
</ic:ConditionalExpression>
</ic:ConditionBehavior>
</i:Interaction.Behaviors>
<ic:ChangePropertyAction PropertyName="Width" Value="200"/>
</ic:PropertyChangedTrigger>
</i:Interaction.Triggers>
添付ビヘイビアーの利点は View のコードビハインドを書かなくてすむ、一度作成すると再利用が容易、使用するのにXAMLだけで書ける、Blend でサポートされている、といろいろある。
MVVM パターンで VM から VIEW を操作するには、添付ビヘイビアーを使用することも推奨する。