IValueConverter参数,用于条件转换

本文关键字:条件 转换 用于 参数 IValueConverter | 更新日期: 2023-09-27 17:51:08

我有一个表单,其中的文本框(默认情况下)采用十进制值。不幸的是,业务规则规定它们也可以取百分比值(实际上是一样的,只是乘以100)。为了确保正确的值插入到数据库(例如,如果应答者输入95,我希望它成为。95),我添加了复选框旁边的相关文本框,用户可以选择,以表明该值是一个百分比,而不是一个小数。为了在十进制和百分比之间切换值,以便将来显示,报告等,我正在尝试使用IValueConverter。

我已经创建了一个转换器,它将字段值相乘以显示为百分比,并且(尽管我还没有进行测试)应该在保存时将该显示值重新转换回小数。

我遇到的问题是让转换器只在选中复选框的地方工作。从我所有的阅读,似乎最有可能的方式来做到这一点将使用复选框的值作为IValueConverter的参数,但我不知道如何做到这一点。

所以,我的问题是:我如何(甚至我可以)使用复选框。从复选框坐在旁边的文本框作为参数到IValueConverter,以确定是否要做TextBox文本的转换?问题是如何识别与正在转换的TextBox相关的复选框,以及如何将其值传递为IValueConverter的参数

我试着在这里看:我怎么能传递一个引用到另一个控件作为IValueConverter参数?

IValueConverter参数,用于条件转换

不幸的是,您不能在ConverterParameter上使用Binding,但是您可以在此任务中使用multivalueconverter。

你可以这样用

<TextBlock.Text>
  <MultiBinding Converter="{StaticResource YourConverter}">
    <Binding Path="YourDecimalProperty"/>
    <Binding Path="IsChecked" ElementName="YourCheckBoxName" />
  </MultiBinding>
</TextBlock.Text>

首先:您不应该将控件(View)传递给转换器。传递IsChecked属性的值就足够了。

不幸的是,你不能绑定ConverterParameter,因为它不是DependencyProperty。作为一种变通方法,你可以将IsChecked属性绑定到ViewModel上的一个属性,然后使用ValueConverter将Textbox绑定到整个ViewModel。在ValueConverter中,您可以访问ViewModel并进行格式化。