我们提供安全,免费的手游软件下载!

安卓手机游戏下载_安卓手机软件下载_安卓手机应用免费下载-先锋下载

当前位置: 主页 > 软件教程 > 软件教程

数据绑定中的StringFormat问题及解决方法

来源:网络 更新时间:2024-08-31 09:33:00

在数据绑定过程中,我们通常使用StringFormat对要显示的数据进行格式化,以便获得更为直观的展示效果。但在某些情况下,如Button的Content属性以及ToolTip属性绑定数据进行StringFormat时会失效。首先,我们回顾一下StringFormat的基本用法。

StringFormat的用法

StringFormat是BindingBase的属性,用于指定当绑定值显示为字符串时应如何设置该绑定的格式。因此,BindingBase的三个子类:Binding、MultiBinding、PriorityBinding都可以对绑定数据进行格式化。

Binding

Binding是最常用的绑定方式。使用StringFormat遵循.Net格式字符串标准即可。例如:。其中{0}表示第一个数值。如果StringFormat属性的值以花括号开头,则需要有一对花括号{}进行转义。如果设置Converter和StringFormat属性,则首先将转换器应用于数据值,然后StringFormat应用该值。

MultiBinding

Binding绑定时,格式化只能指定一个参数,而MultiBinding绑定时则可指定多个参数。例如:






PriorityBinding

相比于前两种绑定,PriorityBinding使用的频率不那么高。它的主要作用是按照一定优先级顺序设置绑定列表。PriorityBinding和其包含的绑定列表中的子Binding也都可以设置StringFormat属性。

Content属性格式化失效的原因

Button的Content属性可以用字符串赋值并显示在按钮上,但使用StringFormat格式化并不会生效。在BindingExpressionBase中有一段代码,其中的DetermineEffectiveStringFormat()方法检测有效的StringFormat。这段代码的作用就是检测有效的StringFormat,并通过SetValue方法保存起来。Button的Content属性虽然可以用字符串赋值,但它实际上是Object类型,因此在检测有效的StringFormat表达式时会直接过滤掉。ToolTip也同样是Object类型。

解决方法

对于Content这种Object类型的属性需要绑定字符串并且需要格式化时,可以采用以下三种方式解决:

  1. 自定义ValueConverter,在ValueConverter中对字符串进行格式化;
  2. 绑定到其他可进行StringFormat的属性上,比如TextBlock的Text属性进行格式化,ToolTip绑定到Text上;
  3. 将TextBlock作为Content的值。

小结

数据绑定时出现StringFormat失效的主要分为两种情况。一是没有遵循绑定时StringFormat使用的约束,二是绑定的目标属性不是String类型。