如何将一个属性绑定到另一个属性,偏移特定量?

时间:2011-11-23 12:36:16

标签: c# wpf binding wpf-controls pixelsense

我正在尝试将一行的两个点绑定到两个Ellipses,它们位于ScatterViewItems中。 目前,我能够将ActualCenter.X和.Y绑定到ScatterViewItem,但是因为椭圆不是ScatterViewItem中的唯一元素(也有标签),所以它偏离中心,例如线的端点不是椭圆的中心。

Ellipse没有ActualCenter属性。

我想知道我是否能够将属性绑定偏移一定量,或者我是否可以使用其他类型的绑定,以便我可以在容器类中找出正确的椭圆中心(对于ellipse,label和scatterviewitem),并将其作为绑定源返回。

以下是我设置绑定的代码。 this.avatar指的是Line形状。 node_onenode_two是容器对象,其中包含ScatterViewItemNode类还包含Ellipse,我基本上喜欢它作为源的中心,但我对当前源的简单偏移感到满意。

        BindingOperations.SetBinding(this.avatar, Line.X1Property, new Binding
        {
            Source = node_one.getScatterViewItem(),
            Path = new PropertyPath("ActualCenter.X")
        });
        BindingOperations.SetBinding(this.avatar, Line.Y1Property, new Binding
        {
            Source = node_one.GetNodeCenterY(),
            Path = new PropertyPath("GetNodeCenterY()")
        });

        // Bind line.(X2,Y2) to destination.ActualCenter  
        BindingOperations.SetBinding(this.avatar, Line.X2Property, new Binding
        {
            Source = node_two.getScatterViewItem(),
            Path = new PropertyPath("ActualCenter.X")
        });
        BindingOperations.SetBinding(this.avatar, Line.Y2Property, new Binding
        {
            Source = node_two.GetNodeCenterY(),
            Path = new PropertyPath("GetNodeCenterY()")
        });

我尝试将Source设置为node_one,将Path设置为new PropertyPath("getOffsetCenter()"),它返回一个double,但它不起作用。它没有抱怨,但它没有工作:)任何提示赞赏:)


编辑,尝试使用IValueConverter:

[ValueConversion(typeof(Double), typeof(Double))]
public class OffsetValues : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        DateTime date = (DateTime)value;
        Double y = (Double)value;
        Double offset = (Double)parameter;
        return y + offset;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        Double dblValue = (Double)value;
        Double offset = (Double)parameter;
        Double resultDblValue = dblValue - offset;
        return resultDblValue;
    }
}

以上是作为一个新类添加的,但我如何将它附加到我的绑定源 - MSDN上的示例有一个基于XAML的实现,但我的是程序化的。

2 个答案:

答案 0 :(得分:2)

你需要在后面的代码中写一些ValueConverter。

有关详细信息,请查看here

答案 1 :(得分:2)

看起来您正在尝试将绑定设置为方法调用,而不是属性。绑定只能引用属性,因为绑定设置的依赖属性意味着指向属性的位置,而不是方法调用。

我见过人use a Converter to convert a Method to a Property value但是我自己没有使用过它。

作为旁注,我厌倦了总是编写转换器以使我的绑定偏移一定量,因此创建了我自己的Math Converter来执行此操作。要使用它,只需将ConverterParameter设置为数学等式,@VALUE代替绑定值,例如(@VALUE / 2) + 20。如果您希望它使用多个绑定值,只需将其更改为MultiConverter

即可