2009-11-23 1 views
20

Dies ist vielleicht kein Hirngespinst, aber ich kann es einfach nicht funktionieren. Ich habe ein View-Modell, das eine Eigenschaft namens bool NotFound zeigt Ich möchte das an einen Trigger zu binden, so dass, wenn es ein Bild auf meinem Steuerelement ändert sich ändert.Bild mit Trigger ändern WPF MVVM

Dies ist das XAML, das ich als Datenvorlage für eines meiner Ansichtsmodelle verwende.

<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> 

Ich möchte in der Lage sein, die zur Bindung an die NotFound Eigenschaft und ändern Sie die Bildquelle.

Danke.
Nathan

Antwort

44

Es ist alles gut, dass ich es herausgefunden.

<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

Gibt es eine Möglichkeit, dies mit DataContext und nicht DataTemplate zu tun? Dieser Code funktioniert nicht, wenn das DataTemplate nicht definiert ist. – 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

Ich glaube, die Sichtbarkeit ist besser zusammengebrochen statt versteckt. Beide werden in diesem Ansatz arbeiten, aber einige zusätzliche Messungen werden auftreten. – Konstantin