我有一个带有文本框的表单,默认情况下采用小数值。不幸的是,业务规则说它们也可以采用一个百分比值(实际上是相同的,只需乘以100)。为了确保将正确的值插入到数据库中(例如,如果响应者有输入95,我希望它变为.95),我在相关的文本框旁边添加了复选框,用户可以选择该复选框以指示该值是百分比,不是小数。要切换十进制和百分比之间的值以供将来显示,报告等,我正在尝试使用IValueConverter。
我创建了一个转换器,它将字段值乘以显示为百分比,并且(虽然我还没有进行测试)应该在保存时将该显示值重新转换回小数。
我遇到的问题是转换器只能在选中复选框的地方工作。从我的所有阅读中看来,最有可能的方法是使用复选框值作为IValueConverter的参数,但我不知道如何做到这一点。
所以,我的问题是:我如何(甚至可以)使用位于TextBox旁边的Checkbox中的Checkbox.IsChecked值作为IValueConverter的参数来确定是否在TextBox文本上进行转换?问题是如何识别与正在转换的TextBox相关的Checkbox以及如何将其值作为IValueConverter的参数传递
我试着在这里徘徊:How can I pass a reference to another control as an IValueConverter parameter?,但它有点令人沮丧。
提前致谢。
答案 0 :(得分:2)
不幸的是,您无法在ConverterParameter上使用Binding,但您可以使用IMultiValueConverter执行此任务。
你会像
一样使用它<TextBlock.Text>
<MultiBinding Converter="{StaticResource YourConverter}">
<Binding Path="YourDecimalProperty"/>
<Binding Path="IsChecked" ElementName="YourCheckBoxName" />
</MultiBinding>
</TextBlock.Text>
答案 1 :(得分:0)
首先:您不应将控件(View)传递给转换器。传递IsChecked属性的值应该足够了。
不幸的是,你不能DataBind ConverterParameter,因为它不是DependencyProperty。作为解决方法,您可以将IsChecked属性绑定到ViewModel上的属性,然后使用ValueConverter将Textbox绑定到整个ViewModel。然后,您可以在ValueConverter中访问ViewModel并进行格式化。