2016-02-16 81 views
0

我想画一个Bezier曲线,并约束其所有值:绑定多个属性?

<PathFigure StartPoint="20,20" IsClosed="False"> 
    <BezierSegment Point1="70,130" Point2="220,20" Point3="180,160"/> 
</PathFigure> 

因此,在所有情况下,“点”或StartPoint可以被定义我想它独立绑定到值的一类。

有没有办法比手动绑定每个属性更有效地做到这一点?

回答

-1

对于这个特定的问题,你可以做如下:

基本上,我们仍然使用MVVM模式。首先你需要PathPoint类和PathFigureViewModel类代表你的数据。

public class PathPoint 
{ 
    public int X 
    { 
     get; 
     set; 
    } 

    public int Y 
    { 
     get; 
     set; 
    } 
} 

public class PathFigureViewModel 
{ 
    public PathPoint StartPoint 
    { 
     get; set; 
    } 

    public PathPoint Point1 
    { 
     get; set; 
    } 

    public PathPoint Point2 
    { 
     get; set; 
    } 

    public PathPoint Point3 
    { 
     get; set; 
    } 

} 

然后,你可以定义你PathFigure如下:

<PathFigure x:Name="PathFigure1" StartPoint="{Binding StartPoint, Converter={StaticResource PointConvertor}}" IsClosed="False"> 
    <BezierSegment Point1="{Binding Point1, Converter={StaticResource PointConvertor}}" Point2="{Binding Point2, Converter={StaticResource PointConvertor}}" Point3="{Binding Point3, Converter={StaticResource PointConvertor}}"/> 
</PathFigure> 

注意,上面有它转换PathPointSystem.Windows.Point如下转换器:

public class PointToPathPointConvertor : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var p = value as PathPoint; 
     return new System.Windows.Point(p.X, p.Y); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return null; 
    } 
} 

最后你需要设置DataContext。由于PathFigure未公开DataContext属性,因此可以设置其父Path对象的DataContext属性。类似如下:

PathFigureViewModel vm = new PathFigureViewModel(); 
vm.StartPoint = new PathPoint() { X = 20, Y = 20 }; 
vm.Point1 = new PathPoint() { X = 70, Y = 130 }; 
vm.Point2 = new PathPoint() { X = 220, Y = 20 }; 
vm.Point3 = new PathPoint() { X = 180, Y = 160 }; 

this.Path.DataContext = vm; 

现在完成了。