首页 > 其他分享 >wpf中IValueConverter的两种实现方式(key和静态实例)以及 ValueConversion 特性

wpf中IValueConverter的两种实现方式(key和静态实例)以及 ValueConversion 特性

时间:2023-04-26 13:46:01浏览次数:44  
标签:object ValueConversion IValueConverter 调用 ConvertBack key new 转换器

使用值转换器的场景:你得到一个值,你需要根据你的需求转成另一个东西,可以是图片、对象等等都行

传入的是object,传出的也是object,使用值转换器需要继承接口:IValueConverter

里面有两个方法Convert 和 ConvertBack

Convert很好理解:你把xaml中某个对象中的某个属性或其他值传递到ValueConverter进行转换,return转换后的那个值

ConvertBack:看别人的回答是这么说的:ConvertBack方法用于将数据的可视化表示转换为特定的DataType。例如:您使用Converter将布尔值true转换为字符串“TrueBoolean”。此文本将显示在文本框中。当你改变TextBox的值时,ConvertBack方法将在绑定再次触发时被调用(默认为OnFocusLost)。现在,ConvertBack方法将尝试将新值转换为您希望的数据类型。因此,您必须实现逻辑来将“false boolean”转换为false。

 

定义好了Converter如何使用呢

在xaml代码里,你必须引用你写的converter所在的路径,如果是根路径下就直接使用xaml自带的local即可,别的则需要找到路径下的converter

 

两种引用的方式:

1、通过key值调用

把converter当作资源绑定到本地路径下,给他一个key然后调用

 

 1 <Window x:Class="WpfTutorialSamples.DataBinding.ConverterSample"
 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 4 xmlns:local="clr-namespace:WpfTutorialSamples.DataBinding"
 5 Title="ConverterSample" Height="140" Width="250">
 6 <Window.Resources>
 7 <local:YesNoToBooleanConverter x:Key="YesNoToBooleanConverter" />  //引入项目根路径下的转换器类,并起别名 YesNoToBooleanConverter(第一个是类名,第二个是起的名字,可以任意)
 8 </Window.Resources>
 9 <StackPanel Margin="10">
10 <TextBox Name="txtValue" />
11 <WrapPanel Margin="0,10">
12 <TextBlock Text="Current value is: " />
13 <TextBlock Text="{Binding ElementName=txtValue, Path=Text, Converter={StaticResource YesNoToBooleanConverter}}"></TextBlock> //将textbox中text的值交给转换器处理
14 </WrapPanel>
15 <CheckBox IsChecked="{Binding ElementName=txtValue, Path=Text, Converter={StaticResource YesNoToBooleanConverter}}" Content="Yes" />
16 </StackPanel>
17 </Window>

2、通过类中绑定静态实例进行调用,这是一种奇怪的调用方式,但WPF就是这么干的,请习惯他

在类中代码中创造静态实例

    [ValueConversion(typeof(string), typeof(BitmapImage))]  //指明转换方式 是从字符串 转为 bit图
    internal class HeaderToImageConverter : IValueConverter
    {
        public static HeaderToImageConverter Instance = new HeaderToImageConverter(); //创建了一个静态实例
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        { 
            return new BitmapImage(new Uri($"pack://application:,,,/{image}"));
        }

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

在xaml中调用转换器(转换器类路径仍在根目录下)

 <Image Width="50" Height="50"  Source="{Binding
                                            RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type TreeViewItem}},
                                            Path=Tag,
                                            Converter={x:Static local:HeaderToImageConverter.Instance}}"/>

 

标签:object,ValueConversion,IValueConverter,调用,ConvertBack,key,new,转换器
From: https://www.cnblogs.com/lordxinwei/p/17355644.html

相关文章

  • gitlab ssh key无法连接
    tosolveaboveissuejustchange"HostKeyVerificationStrategy"to"Acceptfirstconnection"Dashboard>ManageJenkins>ConfigureGlobalSecurity>GitHostKeyVerificationConfiguration.TheninHostKeyVerificationStr......
  • 龙脉key sdf 测试
    在openEuler(推荐)或Ubuntu或Windows(不推荐)中完成下面任务使用key定义一个私有函数staticintgetRandom(char*r,intlength),获取length个字节的随机数(5‘)把上述函数集成到src中的sdf.c中的SDF_GenerateRandom中(5')在test中的main.c调用SDF_GenerateRandom进行测试,至少......
  • SciTE4AutoHotkey新建文件默认编码 UTF-8 with BOM
    若SciTE4AutoHotkey,能在新建时自动选编码为 带BOM的UTF-8的就省事省心了。可通过配置SciTEGlobal.properties、SciTEUser.properties无法解决这个难题,似乎是个bug。通过菜单 工具Scite4AutoHotkeysettings...设置也只能使新建的文件编码为UTF-8NOBOM经过无数次的搜索以......
  • Getselection能不能接受keyword?
    这个玩意绝对是个坑,CAD对Getselection的支持并不充分,需要通过keywordinput事件来弄,比较麻烦,而且很容易出问题。所以我的做法是,不使用,哈哈!下面这个是kean的代码:[CommandMethod("SELKW")]publicvoidGetSelectionWithKeywords(){Documentdoc=AcadApp.......
  • keydb ModJS的一些说明
    一些特性modjs是基于了标准redis的模块支持处理的,当然是需要注意redis版本的,实际上大家基本都已经使用相对比较新的redis版本的提供了EVALJS可以实现类似lua的命令操作支持添加命令(但是需要在启动的时候)支持npm模块,但是不是完全兼容npm的,没有实现io的大部分函数,同时比......
  • 多校第六场 1011 hdu 5363Key Set(组合数学)
    题目链接:hdu5363题目大意:给出一个到n的自然数集合,问它有多少个子集,元素之和是偶数。题目分析:首先偶数不会导致集合的和的奇偶性发生变化;奇数会导致集合的和的奇偶性发生变化。我们设奇数m1个,偶数m2个。所以我们可以选取0~m1个偶数,但是只能选取偶数个奇数。那么偶数的方案数就是......
  • SQLite Reset Primary Key Field
    SQLiteResetPrimaryKeyField回答1Trythis:deletefromyour_table;deletefromsqlite_sequencewherename='your_table';SQLiteAutoincrementSQLitekeepstrackofthelargestROWIDthatatablehaseverheldusingthespecialSQLITE_SEQ......
  • C# Mysql The given key '12599' was not present in the dictionary.
    如果查询语句没有问题数据库连接字符串也没有问题,可能是Mysql.Data引用与当前安装的Mysql数据库版本不兼容的问题。我本地安装的mysql版本是8.30,在VS里使用Nuget程序包下载的Mysql.Data引用是其他更低的版本,将程序里用的Mysql.Data也更新到8.30就好了。版本保持一致。 ......
  • keydb 提供的ModJS 模块
    keydb提供了ModJS模块,可以支持js开发redis扩展,很方便,同时也支持了简单的npm模块能力(但是也有不少限制)以下是一个参考使用环境准备docker-compose注意npm模块需要到redis的work目录(具体如下docker的是/data) version:'3'services:keydb:......
  • redis的key命名规范
    一、键值设计1.key名设计【建议】:可读性和可管理性以业务名(或数据库名)为前缀(防止key冲突),用冒号分隔,比如业务名:表名:idredis使用的时候注意命名空间,一个项目一个命名空间,项目内业务不同命名空间也不同。一般情况下:1)第一段放置项目名或缩写如project2)第二段把表名......