【问题标题】:Change image using trigger WPF MVVM使用触发器 WPF MVVM 更改图像
【发布时间】:2010-12-19 16:17:21
【问题描述】:

这可能很简单,但我似乎无法让它发挥作用。我有一个视图模型,它公开了一个名为 bool NotFound 的属性,我想将它绑定到触发器,以便当它更改我的控件上的图像时。

这是我用作我的一个视图模型的数据模板的 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 属性并更改图像源。

【问题讨论】:

    标签: c# wpf xaml mvvm


    【解决方案1】:

    一切都很好,我想通了。

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

    【讨论】:

    • 有什么方法可以使用 DataContext 而不是 DataTemplate?未定义 DataTemplate 时,此代码不起作用。
    【解决方案2】:
    <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>
    

    【讨论】:

    • 我相信 Visibility 最好是折叠而不是隐藏。两者都可以在这种方法中工作,但会发生一些额外的测量。
    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多