2016-09-29 2 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="{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

답변을 주셔서 고마워,하지만 내 문제는 여전히 살아있다. 내 이미지가 있어야하는 곳에 "sys"가 있습니다. – Pinotek

관련 문제