【问题标题】:IValueConverter parameter for conditional converting用于条件转换的 IValueConverter 参数
【发布时间】:2012-12-24 13:05:10
【问题描述】:

我有一个带有文本框的表单,这些文本框(默认情况下)采用十进制值。不幸的是,业务规则说它们也可以取一个百分比值(实际上是相同的东西,只是乘以 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?,但有点郁闷。

提前致谢。

【问题讨论】:

    标签: c# wpf ivalueconverter


    【解决方案1】:

    很遗憾,您不能在 ConverterParameter 上使用绑定,但您可以使用 IMultiValueConverter 来完成此任务。

    你会像这样使用它

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

    【讨论】:

    • 我已经这样做了,它将旅途中的值从 Db 更改为 gui,但是当用户更改文本框中的值时,新值不会被保存回 Db。我是否遗漏了一些明显的东西,或者这听起来像是一个不同的问题?
    • 您可能需要在 MultiBinding(或每个 Binding)上设置 Mode=TwoWay,并确保您已正确实现 ConvertBack 方法,我认为。
    • 是的,(是的),我想是的。看起来这可能是一个验证错误。会抛出另一个问题。谢谢队友。
    【解决方案2】:

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

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

    【讨论】:

    • 1) 好的,但问题不在于传递的内容,而在于如何访问它。如何从 TextBox 旁边的复选框中获取 IsChecked 值,以便将其作为参数传递 2) 我没有使用 SL,我使用的是 WPF。这有什么不同吗?
    • 在 Silverlight 和 WPF 中无法使用数据绑定设置 ConverterParameter,因为 ConverterParameter 不是 DependencyProperty。如果您像这样设置绑定:Text={Binding} 并将复选框的 IsChecked 属性绑定到 viewmodel 上的属性,则转换器中的 value 参数将指向整个 ViewModel,因此您可以访问该属性绑定到复选框。它有点难看,但它会起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多