2012-01-25 21 views
0

誰かが助けてくれることを願っています。バインディングを使用してスタイルの変更をトリガーする

私はViewModelのListプロパティによって設定されたListViewを持っています。

私は強調表示が必要なUIの行を含むViewModelに別のリストプロパティを持っています。

<ListView.Resources> 
     <Style TargetType="ListViewItem"> 
      <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="Foreground" Value="Red"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.Resources> 

これまさに私が赤でリストビューのハイライトで選択した任意の項目、のように見えません。 私はViewModelのListプロパティにこのスタイルのトリガーをバインドできます。

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

答えて

4

あなたの商品にIsSelectedというプロパティを作成し、ListViewItem.IsSelected

<Style TargetType="ListViewItem"> 
    <Setter Property="IsSelected" Value="{Binding IsSelected}" /> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Foreground" Value="Red"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

にバインド編集

あなたのDataItem内のプロパティに基づいて他のスタイルのセッターを適用する場合は、使用通常のTriggerではなくDataTriggerを使用します。通常のトリガは、バインディングではなくUI要素のプロパティでのみ使用されます。

<Style TargetType="ListViewItem"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsHighlighted}" Value="True"> 
      <Setter Property="Foreground" Value="Red" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

質問を完全にお読みください。私は "私は強調表示が必要なUIの行を含むViewModelに別のリストプロパティを持っています。" 「このスタイルのトリガーを、私のViewModelのListプロパティにバインドできるようにしたい。」 –

+0

@SheikYerbouti私はあなたの質問を理解できないのではないかと心配しています。あなたのViewModelはUIオブジェクトを持つべきではありません、それはデータオブジェクトを持つ必要があります。これを行う理想的な方法は、データオブジェクトにビューを反映させることです。そのため、ViewModelで選択した項目を追跡する場合は、データオブジェクトに 'IsSelected'プロパティのようなものが必要です。本当に2つの項目リストを持っている場合は、選択した項目リストをループし、データリスト内の項目を見つけて、その項目のIsSelectedプロパティをtrueに設定します。 – Rachel

+0

ViewModelにUIロジックがなく、UIにコードがありません。 MVVMごとに。 MVVMには、私のリストに必要なすべてのオブジェクトと、強調表示したいオブジェクトが含まれている2つのリストプロパティがあります。 isSelectedは単なる例です。そのトリガーをリストビューの項目の束に適用したいと思います。 MVVM内のオブジェクトのリストによってこれらの項目を決定します。 –

関連する問題