2014-06-13 57 views
0

我對WPF很新穎,我正嘗試使用MVVM light構建一個相當簡單的應用程序。基於屬性的樣式列表項

在我MainWindow.xaml(圖)我有這樣的:

<ListBox ItemsSource="{Binding InstalledVersions}" 
      ItemTemplate="{StaticResource VersionsDataTemplate}" 
      Style="{StaticResource VersionsStyle}" 
      ItemContainerStyle="{StaticResource VersionItemStyle}"/> 

哪裏InstalledVersions是InstalledVersionViewModel

在我MainWindowResources.xaml我有這個(簡體)的列表:

<DataTemplate x:Key="VersionsDataTemplate" 
       DataType="{x:Type viewmodels:InstalledVersionViewModel}"> 
    <Grid> 
     <TextBlock Text="{Binding VersionNumber}" /> 
     <TextBlock Text="{Binding FolderPath}" /> 
    </Grid> 
</DataTemplate> 
<Style x:Key="VersionsStyle" 
     TargetType="{x:Type ListBox}"> 
    <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
    <Setter Property="VerticalContentAlignment" Value="Center" /> 
</Style> 
<Style x:Key="VersionItemStyle" 
     TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="Background" Value="White" /> 
</Style> 

我希望有不同的背景,取決於我的InstalledVersionViewModel的「IsActive」屬性。

我想這(以及它的一些變化)添加到我的VersionItemStyle,但(我懷疑,主要是因爲我不明白我在做什麼),這是行不通的:

<Style.Triggers> 
     <Trigger Property="{Binding Path=DataContext.IsActive, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type viewmodels:InstalledVersionViewModel}}}" Value="True"> 
      <Setter Property="Background" Value="Red" /> 
     </Trigger> 
    </Style.Triggers> 

謝謝!

回答

1

由於IsActive是鑑於對每一行模型的一部分就可以實現與DataTrigger

<Style x:Key="VersionItemStyle" TargetType="{x:Type ListBoxItem}"> 
    <Setter Property="Background" Value="White" /> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding IsActive}" Value="True"> 
     <Setter Property="Background" Value="Red" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

真棒,謝謝! – thomasb