Главное, что вам нужно для привязки, - это конвертер, который преобразует ваши точки в Geometry
, который понадобится для пути как Data
, вот что мой односторонний преобразователь из массива System.Windows.Point
в Геометрия выглядит так:
[ValueConversion(typeof(Point[]), typeof(Geometry))]
public class PointsToPathConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Point[] points = (Point[])value;
if (points.Length > 0)
{
Point start = points[0];
List<LineSegment> segments = new List<LineSegment>();
for (int i = 1; i < points.Length; i++)
{
segments.Add(new LineSegment(points[i], true));
}
PathFigure figure = new PathFigure(start, segments, false); //true if closed
PathGeometry geometry = new PathGeometry();
geometry.Figures.Add(figure);
return geometry;
}
else
{
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
Теперь все, что действительно осталось, - это создать его экземпляр и использовать его в качестве преобразователя для привязки. Как это может выглядеть в XAML:
<Grid>
<Grid.Resources>
<local:PointsToPathConverter x:Key="PointsToPathConverter"/>
</Grid.Resources>
<Path Data="{Binding ElementName=Window, Path=Points, Converter={StaticResource ResourceKey=PointsToPathConverter}}"
Stroke="Black"/>
</Grid>
Если вам нужно, чтобы привязка обновлялась автоматически, вы должны работать со свойствами зависимостей или интерфейсами, такими как INotifyPropertyChanged
/ INotifyCollectionChanged
Надеюсь, это поможет: D