【问题标题】:wp create a Converter with a binded ConverterParameterwp 使用绑定的 ConverterParameter 创建一个 Converter
【发布时间】:2012-07-01 01:02:05
【问题描述】:

我在这篇文章中看到了一个完全符合我需求的解决方案https://stackoverflow.com/a/8858815/1462911。

但我真的不知道如何正确实现它。

我现在有一个 PositionConverter,它可以转换字符串中的坐标,但我想通过它的参数传递它的父级(画布)的 ActualWidth。

我的 ConverterHelper 是否必须实现 IValueConverter 和 DependencyObject 或仅实现 DependencyObject?

我有点迷茫……

【问题讨论】:

  • 首先告诉我们为什么要将ActualWidth 作为参数传递。提示:在几乎所有情况下,您都可以简单地使用MultiBinding 而不是Binding 和IMultiValueConverter 而不是简单的IValueConverter。这将允许您传入任意数量的绑定值。
  • 我想要的是将 0 和 1 之间的双精度转换为表示 0 和父实际宽度之间的双精度的字符串

标签: wpf binding parameters converter


【解决方案1】:

您需要的最好通过IMultiValueConverter 和MultiBinding 来完成:

public class PositionConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        var scale = (double)values[0]; // this is your [0, 1] double
        var max = (double)values[1]; // this is the ActualWidth
        return scale * max;
    }
}

绑定看起来像:

<Element.Property>
    <MultiBinding Converter="{StaticResource myConverter}">
        <Binding Path="path_to_the_original_double" />
        <Binding RelativeSource="{RelativeSource Mode=FindAncestor, AncestorLevel=1}"
                 Path="ActualWidth" />
    </MultiBinding>
</Element.Property>

【讨论】:

  • 是的,这就是我现在的想法,使用您之前的评论。我马上试试!谢谢您的帮助!! ^^
  • 最后一个问题,转换为字符串的位置用于设置我可以用鼠标拖动的元素的 Canvas.Left 和 Top 属性。所以 0 到 1 属性的绑定是双向的。但是 ActualWidth 上的 Binding 是 OneWay,我应该如何实现 ConvertBack 来管理它?因为 ConvertBack 应该获取 Canvas.Left 属性和 Double.Parse 它,然后将它除以 ActualWidth 属性但是在 ConvertBack 中,如果我是正确的,我无法访问它...
  • @Julien:双向转换不起作用,因为在ConvertBack 中,除非您愿意做可怕的事情,否则您无法找到父母(及其ActualWidth)黑客。在这种情况下,您最好将对象包装在 ViewModel 中并将转换逻辑放入其中(将值作为属性公开)。
  • 添加了另一个问题 ^^ 现在我无法将 ActualValue 传递给 VM,因为它是只读属性并且无法对其进行绑定,即使它是 OneWayToSource 绑定。这是 Microsoft 已知的错误,现在我正在寻找解决方法。
  • 我找到了一种方法来处理我的 ActualWidth here 问题,效果很好!!我现在可以继续了。无论如何谢谢你的关注:)
猜你喜欢
  • 1970-01-01
  • 2011-05-29
  • 2013-05-29
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 2016-02-14
相关资源
最近更新 更多