2013-08-27 13 views
9

View Modelを持つListViewがあります。 ItemsSourceは、View Model内のオブジェクトのコレクションです。一部のフラグIsFlagOnに対して、ビューモデルにプロパティが存在します。 ListViewItemがIsMouseOverを検出したときに、View ModelのそのプロパティをTrueに設定したいとします。他のUI要素はこの同じプロパティにバインドされ、MouseOverが切り替わるとビューが変化します。Property Triggerが発生したときにviewmodelプロパティを設定する方法

これをXAMLでどのように達成できますか?

私はこのような何か(ただし、この休憩を)想像:

<Style> <!-- on the ListViewItem --> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="DataContext.IsFlagOn" Value="True" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

UPDATE:

エラーが

あるスタイルプロパティ 'IsFlagOn' を解決できません。所有する型がStyleのTargetTypeであることを確認するか、Class.Property構文を使用してPropertyを指定します。

UPDATE(2):

はここで、既存のXAML(以下)のもう少しです。 ListViewがVMのプロパティ(AllItems)にバインドされていることがわかります。リストの各項目は、各列がバインドされているVMであることに注意してください。 ListView VMまたはItem VMに対するItemContainerStyleバインディングも同様ですか?

<ListView Itemssource="{Binding AllItems}"> 
    <ListView.ItemContainerStyle> 
     <Style> <!-- on the ListViewItem --> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
        <Setter Property="DataContext.IsFlagOn" Value="True" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 
    <ListView.View> 
     <GridView> 
      <!-- ... --> 
     </GridView> 
    </ListView.View> 
</ListView> 
+0

'これは何の例外がありますか? 'IsFlagOn'は依存関係プロパティですか? – PoweredByOrange

+0

エラーは "タイプDataContextが見つかりません"です。 Viewモデルは 'INotifyPropertyChanged'を実装するプレーンクラスなので、' IsFlagOn'は依存性プロパティではありません。 –

+0

OK、実際の例外は何ですか? – PoweredByOrange

答えて

7

これは、結合様式がために作られたものOneWayToSourceほとんどである - ちょうどビューからビューモデルを更新することができるという。しかし、IsMouseOverは読み取り専用のプロパティであることから、あなたうではないが(原因WPFのバグのため)これを行うことができる:

<Setter Property="IsMouseOver" Value="{Binding Path=IsFlagOn, Mode=OneWayToSource}" /> 

しかし、それを回避する方法があります。それらのいくつかはここに記述されています:OneWayToSource binding from readonly property in XAML

関連する問題