Wpf DataTemplate to draw multiple lines
I need to draw multiple lines with a single DataTemplate like
<DataTemplate x:Key="MultilineDataTemplate">
<Line X1="{Binding X1}" Y1="{Binding Y1}" X2="{Binding X2}" Y2="{Binding Y2}" Fill="Red"
StrokeThickness="2" Stroke="Black" />
</DataTemplate>
Where X1, Y1, X2, Y2 are arrays of coordinates.
I wonder if this DataTemplate can be used.
+3
source to share
1 answer
You can use IValueConverter which will convert your multiple arrays to a list of related objects.
public class ArrayCoordinateConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
ViewModelClassHere viewModel = (value as ViewModelClassHere);
if (viewModel != null)
{
// Assuming that X1 will always have cooresponding elements in X2, Y1, Y2;
var enumerable = viewModel .X1.Select((x, i) => new
{
X1 = x,
X2 = viewModel.X2[i],
Y1 = viewModel.Y1[i],
Y2 = viewModel.Y2[i]
});
return enumerable;
}
return null;
}
public object ConvertBack(object value, Type targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Application:
<ItemsControl ItemsSource="{Binding Converter={StaticResource arrayCoordinateConverter}}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Line X1="{Binding X1}"
Y1="{Binding Y1}"
X2="{Binding X2}"
Y2="{Binding Y2}"
Fill="Red"
StrokeThickness="2"
Stroke="Black" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
+2
source to share