2009-11-23 12 views
20

Questo può essere un non più intelligente, ma proprio non riesco a farlo funzionare. Ho un modello di vista che espone una proprietà chiamata bool NotFound Vorrei associarlo a un trigger in modo che quando cambia l'immagine sul mio controllo cambia.Cambia immagine utilizzando il trigger WPF MVVM

Questo è l'xaml che sto usando come modello di dati per uno dei miei modelli di 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> 

mi piacerebbe essere in grado di impegnare la alla proprietà NotFound e cambiare l'origine dell'immagine.

Grazie.
Nathan

risposta

44

Va tutto bene ho capito.

<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

Esiste un modo per farlo con DataContext e non con DataTemplate? Questo codice non funziona quando il DataTemplate non è definito. – 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

Credo che la Visibilità sia meglio essere compressa anziché nascosta. Entrambi funzioneranno in questo approccio, tuttavia si verificheranno alcune misurazioni aggiuntive. – Konstantin