Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于条件转换的IValueConverter参数_C#_Wpf_Ivalueconverter - Fatal编程技术网

C# 用于条件转换的IValueConverter参数

C# 用于条件转换的IValueConverter参数,c#,wpf,ivalueconverter,C#,Wpf,Ivalueconverter,我有一个表单,其中的文本框(默认情况下)采用十进制值。不幸的是,业务规则说它们也可以取一个百分比值(实际上是相同的,只是乘以100)。为了确保将正确的值插入db(例如,如果响应者输入了95,我希望它变成.95),我在相关文本框旁边添加了复选框,用户可以选择这些复选框来指示值是百分比,而不是小数。为了在十进制和百分比之间切换值,以便将来显示、报告等,我尝试使用IValueConverter 我创建了一个转换器,它将字段值乘以以百分比的形式显示,并且(尽管我还没有开始测试)应该在保存时将显示值重新转

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

我创建了一个转换器,它将字段值乘以以百分比的形式显示,并且(尽管我还没有开始测试)应该在保存时将显示值重新转换回十进制

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

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

我试着在这里溜达,但有点郁闷


提前感谢。

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


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

不幸的是,您不能在ConverterParameter上使用绑定,但可以使用用于此任务的

你会像这样使用它

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


1)好的,但问题不是传递什么,而是如何访问它。如何从文本框旁边的复选框中获取IsChecked值,以便将其作为参数传递2)我没有使用SL,我使用的是WPF。这有什么区别吗?在Silverlight和WPF中都不可能使用数据绑定来设置ConverterParameter,因为ConverterParameter不是DependencyProperty。如果按如下方式设置绑定:
Text={binding}
并将复选框的IsChecked属性绑定到viewmodel上的属性,则转换器中的
value
参数将指向整个viewmodel,这样您就可以访问绑定到复选框的属性。这有点难看,但它会工作。我已经这样做了,它会在从Db到gui的过程中更改值,但是当用户更改文本框中的值时,新值不会保存回Db。我是否遗漏了一些明显的问题,或者这听起来像是一个不同的问题?您可能需要在多重绑定(或者每个绑定)上设置
Mode=TwoWay
,并确保正确实现了ConvertBack方法,我认为。是,(是),我认为是。看起来可能是验证错误。我会提出另一个问题。Thx mate。