c# - Wpf DataTemplate绘制多条线

标签 c# arrays wpf datatemplate

我需要像这样用一个 DataTemplate 绘制多条线

<DataTemplate x:Key="MultilineDataTemplate">
<Line X1="{Binding X1}" Y1="{Binding Y1}" X2="{Binding X2}" Y2="{Binding Y2}" Fill="Red"
StrokeThickness="2" Stroke="Black" />
</DataTemplate>

其中 X1,Y1,X2,Y2 是坐标数组。

我想知道是否可以使用该 DataTemplate。

最佳答案

您可以使用 IValueConverter 将多个数组转换为可绑定(bind)对象列表。

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();
    }
}

用法:

<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>

关于c# - Wpf DataTemplate绘制多条线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25488715/

相关文章:

c# - 将带有标志的单个枚举绑定(bind)到 WPF 中的多个复选框?

c# - 项目重复问题

javascript - 为什么我不能在一个对象内的数组中展开,而该对象具有被过滤的同一级别的另一个对象

c# - 如何将 DataGridTemplateColumn 的 Visibility 绑定(bind)到 textBlock 的 Visibility

c# - 为什么 .Equals 在此 LINQ 示例中不起作用?

php - 在 PHP (PDO) 中了解 MySQL 的内存使用情况

javascript - 从大型 json 数据集创建对象数组

WPF 窗口不会释放其资源,直到程序终止

c# - 如何在WPF应用程序中保存图片

c# - Unity C# - for 循环 : go from one object to the next one (movement) - gets stuck on first object