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







All Articles