2009-11-23 62 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

有沒有辦法用DataContext而不是DataTemplate來做到這一點? DataTemplate未定義時,此代碼不起作用。 – Omri374 2013-04-28 11:29:57

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 2015-07-29 16:24:33