3

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

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

我遇到的问题是让转换器仅在选中复选框的情况下工作。从我所有的阅读来看,最有可能的方法是使用复选框值作为 IValueConverter 的参数,但我不知道如何做到这一点。

所以,我的问题是: 我如何(甚至可以)使用位于 TextBox 旁边的 Checkbox 中的 Checkbox.IsChecked 值作为 IValueConverter 的参数来确定是否对 TextBox 文本进行转换?问题是如何识别与正在转换的文本框相关的复选框以及如何将其值作为 IValueConverter 的参数传递

我尝试在这里查看: 如何将对另一个控件的引用作为 IValueConverter 参数传递?,但它有点令人沮丧。

提前致谢。

4

2 回答 2

2

不幸的是,您不能在 ConverterParameter 上使用绑定,但您可以使用IMultiValueConverter来完成此任务。

你会像这样使用它

<TextBlock.Text>
  <MultiBinding Converter="{StaticResource YourConverter}">
    <Binding Path="YourDecimalProperty"/>
    <Binding Path="IsChecked" ElementName="YourCheckBoxName" />
  </MultiBinding>
</TextBlock.Text>
于 2013-01-10T07:58:26.437 回答
0

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

不幸的是,您不能对 ConverterParameter 进行数据绑定,因为它不是 DependencyProperty。作为一种解决方法,您可以将 IsChecked 属性绑定到 ViewModel 上的属性,然后使用 ValueConverter 将文本框绑定到整个 ViewModel。在 ValueConverter 中,您可以访问 ViewModel 并进行格式化。

于 2013-01-10T07:53:14.667 回答