DataContext에 따라 조건부 프레임 워크 타입
-
05-07-2019 - |
문제
MV-VM 응용 프로그램에서 사용자의 아바타를 보여 주어야합니다. 이미지는 viewModel 객체의 유형 이미지 소스 속성에 제공됩니다. 그래서 그것이 제가 현재 가지고있는 것입니다.
<Image Source="{Binding Path=UserAvatar}"/>
그러나 일부 사용자는 아바타가 구성되지 않았을 수 있으므로 Useravatar는 null
. 이 경우 기본 아바타를 보여주고 싶습니다. 누구도 기본 이미지에 대해 알아야합니다. 기본 이미지에 대해 알아야합니다. 왜냐하면 프레젠테이션의 우려 일뿐입니다.
따라서 ImagesOURCE가 주어진 ImagesOURCE를 사용하여 이미지를 어떻게 표시 할 수 있습니까? null
. DataTriggers와 함께 어떤 종류의 DataTemplate을 사용해야합니까? 지금부터 나는 그것들을 ItemsControls에만 사용 했으므로 모르겠습니다.
해결책
당신이 올바르게 추측했듯이, 템플릿과 트리거는 실제로 당신의 친구입니다.
다음은 다음을 사용하는 구현입니다 ContentControl
:
<ContentControl Content="{Binding Path=UserAvatar}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Image x:Name="image" Source="{Binding}"/>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter TargetName="image" Property="Source" Value="--your awesome default image here--" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
그리고 당신의 기본 일이없는 상황에서 ImageSource
, 그리고 당신은 다른 컨트롤과 약간의 놀이를 원합니다. 항상 Visibilty
재산:
<ContentControl Content="{Binding Path=UserAvatar}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Grid>
<Image x:Name="image" Source="{Binding}" />
<Canvas x:Name="defaultImage" Visibility="Collapsed" />
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter TargetName="image" Property="Visibility" Value="Collapsed" />
<Setter TargetName="defaultImage" Property="Visibility" Value="Visible" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
도움이 되었기를 바랍니다..
제휴하지 않습니다 StackOverflow