2016-09-29 66 views
0
<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,并且应该更改图像。但这种改变不起作用。DataTemplate不会改变图片

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

如果分配新的值变量'_serverKindTrigger',不提高的通知。通过属性来实现:'ServerKindTrigger = 0;'。 – ASh

回答

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

谢谢,这就是解决方案! (: – Pinotek

0

您正在更改本地字段而不是属性,这就是为什么它不触发绑定更新。

更改您的开关/外壳分配以分配ServerKindTrigger属性。

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

感谢您的回答,但我的问题仍然存在。在我的形象应该是,那里只是站在“系统”。 – Pinotek