2012-01-25 58 views
0

希望有人可以在这里帮忙。使用绑定触发样式更改

我有我的ViewModel中List属性填充的ListView。

我有我的ViewModel中的另一个列表属性,其中包含UI中的行,我需要突出显示。

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

这的确如此,我在List中选择的任何项目在Red中突出显示。 我希望能够将此样式触发器绑定到我的ViewModel中的List属性。

有人知道这可以实现吗?

回答

4

创建一个在您的项目称为IsSelected财产,它如果要应用基于您的DataItem属性的其他风格的setter方法绑定到你的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> 

编辑

,使用DataTrigger代替常规触发器。常规触发器仅用于UI元素属性,而不是绑定。

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

请完整阅读该问题。我说:“我的ViewModel中有另一个列表属性,它包含我需要突出显示的UI中的行。” “我希望能够将此样式触发器绑定到ViewModel中的List属性中。” –

+0

@SheikYerbouti恐怕我不明白你的问题。你的ViewModel不应该有UI对象,它应该有数据对象。这样做的理想方式是让你的数据对象反映你的视图,所以如果你想跟踪ViewModel中的选定项目,那么数据对象应该有一个像IsSelected属性。如果你真的想要两个项目列表,然后遍历所选项目列表,找到数据列表中的项目,并将它的IsSelected属性设置为true – Rachel

+0

ViewModel没有UI逻辑,UI没有代码。按照MVVM。我在MVVM中有两个列表属性,一个包含我想要列表中的所有对象,另一个包含要高亮显示的对象。 isSelected只是一个例子。我想将该触发器应用于列表视图中的一堆项目。我希望这些项目由我的MVVM中的对象列表确定。 –