2009-11-23 2 views
20

이것은 뇌 기능이 아닐 수도 있지만 작동시키지 못하는 것 같습니다. bool NotFound라는 속성을 노출하는 뷰 모델이 있습니다. 컨트롤을 변경하면 이미지가 변경 될 수 있도록 트리거에 바인딩하고 싶습니다.트리거를 사용하여 이미지 변경하기 WPF MVVM

내보기 모델 중 하나의 데이터 템플릿으로 사용하는 xaml입니다.

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

나는 이미지 소스를 NOTFOUND 속성에 바인딩 및 변경할 수 있도록하고 싶습니다.

감사합니다.
나단

답변

44

내가 그것을 알아 낸 모든 좋다.

<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

DataText를 사용하지 않고 DataContext를 사용하여 수행 할 수있는 방법이 있습니까? 이 코드는 DataTemplate이 정의되지 않은 경우 작동하지 않습니다. – 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

나는 시야가 숨겨진 것이 아니라 붕괴되는 것이 더 좋다고 믿습니다. 둘 다이 접근 방식에서 작동하지만 일부 추가 측정이 수행됩니다. – Konstantin