刷新使用值转换器的绑定

2023-12-10

我有一个绑定到一个对象的 WPF UI。我正在使用 ValueConverter 通过业务规则将属性转换为特定图像:


    public class ProposalStateImageConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var proposal = value as Proposal;
            var basePath = "pack://application:,,,/ePub.Content;component/Images/General/Flag_{0}.png";
            string imagePath;

            if(proposal.Invoice != null)
            {
                imagePath = string.Format(basePath, "Good");
            }
            else
            {
                imagePath = string.Format(basePath, "Warning");
            }

            var uri = new Uri(imagePath);
            var src = uri.GetImageSource(); //Extention method

            return src;
        }
    }

该元素是一个 TreeView,其中图像位于第二层:


    <TreeView x:Name="tree"
              ItemsSource="{Binding People}" 
              SelectedItemChanged="OnTreeItemChanged">
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type dmn:Person}" 
                                      ItemsSource="{Binding Proposals}">
                <StackPanel Orientation="Horizontal" ToolTip="{Binding Path=Fullname}" Margin="3">
                    <Image Margin="5,0,5,0" Width="16" Height="16" Source="pack://application:,,,/ePub.Content;component/Images/General/Person_Active.png" />
                    <TextBlock Text="{Binding Path=Firstname}" />
                    <TextBlock Text="{Binding Path=Lastname}" Margin="5,0,0,0" />
                </StackPanel>
            </HierarchicalDataTemplate>
            <HierarchicalDataTemplate DataType="{x:Type dmn:Proposal}">
                <StackPanel Orientation="Horizontal" Margin="3">
                    <Image x:Name="invoiceImage" Width="16" Height="16" Margin="5,0,5,0" Source="{Binding, Converter={StaticResource ProposalStateImageConverter}, UpdateSourceTrigger=PropertyChanged}" />
                    <TextBlock Text="{Binding DeliveryDate, Converter={StaticResource textCulturedDateConverter}}" />
                </StackPanel>
            </HierarchicalDataTemplate>
        </TreeView.Resources>
    </TreeView>

它工作正常,但稍后,当对象的状态发生变化时,我想刷新图像并使值转换器重新评估。这怎么可能?


看起来您只在转换器内使用单个值,并且只是在两个值之间进行简单的切换,因此您可以使用触发器直接在 XAML 中执行此操作。此方法还会切换到针对 Invoice 属性的绑定,以便该属性的任何更改通知都会导致触发器更新。

<HierarchicalDataTemplate >
    <StackPanel Orientation="Horizontal" Margin="3">
        <Image x:Name="invoiceImage" Width="16" Height="16" Margin="5,0,5,0" Source="good.png"/>
        <TextBlock ... />
    </StackPanel>
    <HierarchicalDataTemplate.Triggers>
        <DataTrigger Binding="{Binding Invoice}" Value="{x:Null}">
            <Setter TargetName="invoiceImage" Property="Source" Value="warning.png"/>
        </DataTrigger>
    </HierarchicalDataTemplate.Triggers>
</HierarchicalDataTemplate>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

刷新使用值转换器的绑定 的相关文章

随机推荐

  • Scala:列表[Future]到Future[List],忽略失败的未来

    我正在寻找一种将任意长度的 Future 列表转换为 Future of 列表的方法 我正在使用 Playframework 所以最终我真正想要的是Future Result 但为了让事情变得更简单 我们只是说Future List Int
  • Java 十进制格式 - 与给定的精度一样

    我正在与DecimalFormat 我希望能够以给定的精度读取和写入小数 我正在转换为BigDecimal 本质上 我想要一个DecimalFormat它强制执行以下模式 d d 即 至少一位数字 然后可选地 小数点分隔符后跟至少一位数字
  • 在 WPF 中填充数字显示

    我有一个非常简单的位置读数 它只是一个应用了样式的 TextBlock 在那种样式中 我只是这样设置 还有比这更多的属性 但为了简洁我把它们去掉了 现在 我有一个使用这种样式的显示器 它将显示 0 0 到 30000 0 之间的数字 问题是
  • 如何让 VLC 因预取错误而关闭?

    Python 2 7 lib vlc 不断打印 00000000081257d0 prefetch stream error unimplemented query 264 in control每当有新歌响起时 p play 导致了这个问题
  • 使用自修改代码观察 x86 上的陈旧指令获取

    我被告知并从英特尔手册中读到 可以将指令写入内存 但指令预取队列已经获取了过时的指令并将执行这些旧指令 我未能成功观察到这种行为 我的方法如下 英特尔软件开发手册第 11 6 节指出 对当前缓存在处理器中的代码段中的内存位置进行写入会导致关
  • 如何在 Neo4j 中使用 SSL 证书代替自签名证书(或 Snakeoil.cert)

    对于生产 Neo4j 服务器 我需要使用非自签名的 SSL 证书 我将在下面的回复中发布经验教训 sudo vi etc neo4j neo4j server properties uncomment org neo4j server we
  • MySql 嵌套 SP 会成为瓶颈吗?

    我们有这个 MySQL SP 它调用嵌套 SP 看起来它在负载下表现不佳 该 SP 在负载下可能会变慢 因为它调用嵌套 SP 并使用临时表将数据传递到主 SP DELIMITER drop procedure if exists GeoAr
  • SWT 浏览器无法运行?

    我在使用 SWT 浏览器组件时遇到了一些问题 我正在运行 Ubuntu 11 04 AMD64 和 Eclipse 3 7 以及 Sun 的 Java SE 1 6 我的问题是我的浏览器无法初始化 当我使用 SWT NONE 标志时 出现错
  • Symfony2 表单和 Doctrine2 - 更新指定实体中的外键失败

    我有个人资料和研究 一个人可以完成多项学业 表单正确呈现 有一个按钮 添加新研究 使用 jQuery 我添加了另一个基于数据原型的子表单 效果很好 当我提交带有新子表单的此类表单时 出现数据库错误 Integrity constraint
  • 如何选择最佳的自动化工具与硒的组合[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 这可能是基于意见的问题 但我对选择自动化工具组合感到非常困惑 到目前为止 我一直在使用 Selenium webdriver maven 和 Java 来构建自动化框架 这看起来完全工作正
  • 如何在谷歌应用程序脚本中的表单项中获取图像

    我有多个多项选择题和其中包含图像的复选框 我正在尝试将所有问题编译成一个文档文件 如何获取问题中的图像 它们不在单独的图像项中 https docs google com forms d 1qdqNcaaiKxOoi4IiNc 3xcr1X
  • MySQL - 使用触发器复制表

    我正在尝试复制一个表with触发器 我知道我以前这样做过 只是不记得我是如何做到的以及在哪里学会了如何做到这一点 我试过了CREATE TABLE newname LIKE oldname and CREATE TABLE newname
  • 找出哪个类调用了另一个类中的方法

    PHP 有没有办法找出哪个对象调用了另一个对象中的哪个方法 Exmaple class Foo public function construct bar new Bar bar gt test class Bar public funct
  • 使用 Apache FOP 添加 PDF 可填写表单 (acrofield)

    我正在尝试将可填写的表单 以便最终用户可以使用 acrobat reader 将信息插入其中 然后保存 添加到我使用 Apache FOP 生成的 PDF 中 如果可能的话 我似乎找不到任何有关如何完成此操作的信息 Google 没有提供太
  • android 改造将数组发送为 x-www-form-urlencoded

    我正在使用 Retrofit 作为我的网络库 并且我想发送一个 JSON 数组作为x www form urlencoded 但我不知道该怎么做 这是我的请求 API POST book FormUrlEncoded Call
  • 表达式中的变量赋值如何工作?

    这是我以前见过的做法 但并不常见 在对值本身进行求值的同时将变量分配给一个值 或者是对表达式本身进行求值 例子 Outputs The value is 1 value 1 if var value echo The value is va
  • Ext.JSON.decode():您正在尝试解码无效的 JSON 字符串

    我对此很陌生 两周以来一直在尝试解决我的问题 现在希望您能提供帮助 我的 JSON 输出似乎无效 但我不确定我的问题是来自 PHP 还是 extjs 脚本 我有一个组合框 当我单击它时 它应该显示一个选项列表 该列表基本上来自 Sql 表
  • 如何在 Scala 中将 CSV 列读入向量

    我有一个 CSV 文件 我的 CSV 文件 我想创建一个这样的地图 A gt Vector 10 75 10 75 10 47 B gt Vector 164 56 164 99 160 98 C gt Vector 7 1 7 4 9 4
  • 替换列表列表中的元素 PROLOG

    我开发了一个谓词来替换索引的值Index一个列表的List with Value并创建一个新的更新列表NewList replace List Index Value NewList replace T 0 X X T replace H
  • 刷新使用值转换器的绑定

    我有一个绑定到一个对象的 WPF UI 我正在使用 ValueConverter 通过业务规则将属性转换为特定图像 public class ProposalStateImageConverter IValueConverter publi