DataTemplate 不改变图像

DataTemplate don't change Image

<DataTemplate>
              <Image Name="ServerImageSetter" Source="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test1.svg}"/>
              <DataTemplate.Triggers>
                  <DataTrigger Binding="{Binding ServerKindTrigger}" Value="0">
                      <Setter TargetName="ServerImageSetter" Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test2.svg}"/>
                  </DataTrigger>
                  <DataTrigger Binding="{Binding ServerKindTrigger}" Value="1">
                      <Setter TargetName="ServerImageSetter" Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
                  </DataTrigger>
                  <DataTrigger Binding="{Binding ServerKindTrigger}" Value="2">
                      <Setter TargetName="ServerImageSetter" Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
                  </DataTrigger>
</DataTemplate         

在我的 C# 代码中,我将值的类型切换为 0-2,这应该会改变图像。但是更改不起作用。

 public int ServerKindTrigger
    {
        get { return _serverKindTrigger; }
        set { _serverKindTrigger = value;
            RaisePropertyChanged();
        }
    }   

//Here I switch my serverkind and wanna change the image value 

switch (_serverKind)
        {
            case Servers.test: _serverKindTrigger = 0;

您正在更改本地字段而不是 属性,这就是它没有触发绑定更新的原因。

更改您的 switch/case 分配以分配 ServerKindTrigger 属性。

switch (_serverKind)
        {
            case Servers.test: ServerKindTrigger = 0;

除了设置支持字段 _serverKindTrigger 而不是 属性 ServerKindTrigger,因此不会触发 PropertyChangedEvent,您直接设置图像的源 属性控制:

<Image Source="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test1.svg}"/>

这个所谓的本地值总是比 DataTriggers 中的 Setter 的值具有更高的优先级。有关参考,请参阅 Dependency Property Value Precedence

将您的 XAML 更改为:

<Image>
    <Image.Style>
        <Style TargetType="Image">
            <Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test1.svg}"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ServerKindTrigger}" Value="0">
                    <Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test2.svg}"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding ServerKindTrigger}" Value="1">
                    <Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
                </DataTrigger>
                <DataTrigger Binding="{Binding ServerKindTrigger}" Value="2">
                    <Setter Property="Source" Value="{svg2Xaml:SvgImage ServerAdministrator2;component/Images/test3.svg}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Image.Style>
</Image>