首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataTrigger使用

DataTrigger使用
EN

Stack Overflow用户
提问于 2012-05-17 12:50:10
回答 2查看 2.7K关注 0票数 1

下面是我想在xaml中实现的伪代码

代码语言:javascript
复制
IF vm.AvatarFilePath IS NOT NULL THEN
    Image.Source = {Binding AvatarPath}
ELSE
    If vm.Gender == {x:Static vm:Gender.Female} THEN
        Image.Source = {StaticResource Img_Female}
    ELSE
        Image.Source = {StaticResource Img_Male}
    ENDIF
ENDIF

下面是至少有以下几个问题的实现尝试:

  1. 如何知道AvatarPath是空的,我们关心的是性别?
  2. 还有其他的方法,所以我只能为

指定一次Gender.Male资源,而不是一次。

我怎样才能正确地实现这一点?

干杯,

贝瑞尔

xaml企图1

代码语言:javascript
复制
<DataTemplate x:Key="AvatarPathTemplate">
    <Image x:Name="avatarImage" Source="{Binding AvatarPath}"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding Gender}" Value="{x:Static vm:Gender.Female}">
            <Setter Property="Sourrce" Value="{resx:Resx Img_Female}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Gender}" Value="{x:Static vm:Gender.Male}">
            <Setter Property="Sourrce" Value="{resx:Resx Img_Male}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Gender}" Value="{x:Static vm:Gender.Unknown}">
            <Setter Property="Sourrce" Value="{resx:Resx Img_Male}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Gender}" Value="{x:Static vm:Gender.Unspecified}">
            <Setter Property="Sourrce" Value="{resx:Resx Img_Male}"/>
        </DataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

更新

正如trimeyko所指出的,这可以通过多转换器或在视图模型内部完成。

我的回答是:“我一开始尝试了多转换器的方法,取得了一定的成功,我几乎发了一条帖子来帮助清理它。然后我决定,转换器最好留给真正的转换类型。我同意视图模型方法可能是最简单的,但这似乎更像是视图的工作,我想看看我是否能让它首先以这种方式工作。”

我尝试了一下solving this with a mutliConveter posting here

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-17 15:06:25

您应该能够用几个MultiDataTrigger来完成这个任务:

代码语言:javascript
复制
<DataTemplate x:Key="AvatarPathTemplate">
    <Image x:Name="avatarImage" Source="{Binding AvatarPath}"/>
    <DataTemplate.Triggers>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding AvatarPath}" Value="{x:Null}" />
                <Condition Binding="{Binding Gender}" Value="{x:Static vm:Gender.Female}"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="Source" Value="{resx:Resx Img_Female}"/>
        </MultiDataTrigger>

        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding AvatarPath}" Value="{x:Null}" />
                <Condition Binding="{Binding Gender}" Value="{x:Static vm:Gender.Male}"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="Source" Value="{resx:Resx Img_Male}"/>
        </MultiDataTrigger>
        <!-- etc... -->
    </DataTemplate.Triggers>
</DataTemplate>

这些说明是‘当AvatarPath为null而Gender是女性时.’

进一步改进

由于DataTrigger是按照它们在XAML中出现的顺序应用的,我们可以在下面的示例中消除重复“男性”设置的需要:

代码语言:javascript
复制
<DataTemplate x:Key="AvatarPathTemplate">
    <Image x:Name="avatarImage" Source="{Binding AvatarPath}"/>
    <DataTemplate.Triggers>
        <DataTrigger Binding="{Binding AvatarPath}" Value="{x:Null}">
            <Setter Property="Source" Value="{resx:Resx Img_Male}"/>
        </DataTrigger>
        <MultiDataTrigger>
            <MultiDataTrigger.Conditions>
                <Condition Binding="{Binding AvatarPath}" Value="{x:Null}" />
                <Condition Binding="{Binding Gender}" Value="{x:Static vm:Gender.Female}"/>
            </MultiDataTrigger.Conditions>
            <Setter Property="Source" Value="{resx:Resx Img_Female}"/>
        </MultiDataTrigger>
    </DataTemplate.Triggers>
</DataTemplate>

这里我们要说的是:

将源设置为AvatarPath

  • If AvatarPath为空,将源设置为'Img_Male'

  • If AvatarPath为空,Gender为女性,将源设置为'Img_Female'
票数 4
EN

Stack Overflow用户

发布于 2012-05-17 13:05:05

作为一个选项,您可以使用自定义转换器类并将视图模型转换为位图源。如果您希望使用触发器,那么您可以使用一些多数据工具和/或多个转换器--例如,在要显示Img_Male的情况下。

但是,我认为这些解决方案并不是很好,最好是引入属性/逻辑,简单地将图像源绑定到它,并在视图模型中处理这些视图逻辑。使用这种方法,您也可以为这个逻辑编写单元测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10636061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档