DataTemplate不会改变Image

时间:2016-09-29 14:00:51

标签: c# wpf xaml datatemplate

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

2 个答案:

答案 0 :(得分:0)

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

更改您的开关/案例分配以分配ServerKindTrigger属性。

{{1}}

答案 1 :(得分:0)

除了设置支持字段_serverKindTrigger而不是属性ServerKindTrigger,因此不触发PropertyChangedEvent,您将直接设置Image控件的Source属性:

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

这个所谓的本地值总是优先于DataTriggers中Setters的值。有关参考,请参阅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>