2009-11-23 10 views
20

Esto puede ser un poco ingenioso, pero parece que no puedo hacer que funcione. Tengo un modelo de vista que expone una propiedad llamada bool NotFound Me gustaría vincular eso a un disparador para que cuando cambie una imagen en mi control cambie.Cambiar la imagen usando el disparador WPF MVVM

Este es el xaml que estoy usando como plantilla de datos para uno de mis modelos de vista.

<DataTemplate DataType="{x:Type local:TabFileViewModel}"> 
     <StackPanel Orientation="Horizontal"> 
       <Image Width="16" Height="16" Margin="3,0" Source="Image\TabFile.PNG" /> 
       <TextBlock Text="{Binding Name}" ToolTip="{Binding FullPath}"/> 
     </StackPanel> 
</DataTemplate> 

Me gustaría ser capaz de obligar a la a la propiedad NotFound y cambiar el origen de la imagen.

Gracias.
Nathan

Respuesta

44

Está todo bien lo he descubierto.

<DataTemplate DataType="{x:Type local:TabFileViewModel}"> 
     <StackPanel Orientation="Horizontal"> 
     <Image Width="16" Height="16" Margin="3,0"> 
      <Image.Style> 
       <Style TargetType="{x:Type Image}"> 
       <Style.Triggers> 
         <DataTrigger Binding="{Binding NotFound}" Value="false"> 
          <Setter Property="Source" Value="Image\TabFile.PNG"/> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding NotFound}" Value="true"> 
          <Setter Property="Source" Value="Image\ErrorTabFile.PNG"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Image.Style> 
    </Image> 
</DataTemplate> 
+0

¿Hay alguna manera de hacerlo con DataContext y no DataTemplate? Este código no funciona cuando DataTemplate no está definido. – Omri374

1
<DataTemplate DataType="{x:Type local:TabFileViewModel}"> 
     <StackPanel Orientation="Horizontal"> 
       <Grid> 
        <Image x:Name="a" Width="16" Height="16" Margin="3,0" Source="Image\NotFounds.PNG" /> 
        <Image x:Name="b" Width="16" Height="16" Margin="3,0" Source="Image\TabFile.PNG" /> 
       </Grid> 
       <TextBlock Text="{Binding Name}" ToolTip="{Binding FullPath}"/> 
     </StackPanel> 
     <DataTemplate.Triggers> 
      <DataTrigger Binding={Binding NotFound} Value="true"> 
        <Setter TargetName="a" TargetProperty="Visibility" Value="Visible" /> 
        <Setter TargetName="b" TargetProperty="Visibility" Value="Hidden" /> 
      </DataTrigger> 
      <DataTrigger Binding={Binding NotFound} Value="false"> 
        <Setter TargetName="a" TargetProperty="Visibility" Value="Hidden" /> 
        <Setter TargetName="b" TargetProperty="Visibility" Value="Visible" /> 
      </DataTrigger> 
     </DataTemplate.Triggers> 
</DataTemplate> 
+1

Creo que la visibilidad es mejor que se derrumbe en lugar de ocultarse. Ambos funcionarán de esta manera, aunque se realizarán algunas mediciones adicionales. – Konstantin