WPF-用返回线路的转换器绑定线路



我正在尝试用WPF绘制一些散点图,并努力绘制图表轴上通常存在的小tick痕迹。我的视图模型在每个轴上使用List<Tick>定义了tick的位置,其中每个Tick项目只是tick落在轴上的笛卡尔坐标。我有一个IMultiValueConverter,它使用画布大小将单点转换为可以渲染的线对象...但是如何绑定它?WPF希望我指定X1,X2,Y1和Y2,但我只想将其列出。

我的想法是定义以下数据模板,但是它不会编译,因为我不能直接给Line一个多点。我可以使用中间元素/属性吗?

    <DataTemplate DataType="{x:Type viewModel:Tick}" x:Key="TickTemplate">
        <Line>
            <WhatsMissing?>
                <MultiBinding Converter="{StaticResource PointsConverter}">
                    <Binding Path="Points"/>
                    <Binding Path="DataContext.MinPoint" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/>
                    <Binding Path="DataContext.MaxPoint" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/>
                    <Binding Path="ActualWidth" ElementName="ChartCanvas"/>
                    <Binding Path="ActualHeight" ElementName="ChartCanvas"/>
                </MultiBinding>
            </WhatsMissing?>
        </Line>
    </DataTemplate>

您可以将ContentControl的Content属性绑定到从您的转换器返回的行中,但是IMO转换器不应处理UIELEMENTS。通常应避免在背后的代码中创建和操纵插管。

最好从转换器返回线条计,并将路径的Data属性绑定到结果:

<DataTemplate DataType="{x:Type viewModel:Tick}" x:Key="TickTemplate">
    <Path Stroke="Black" StrokeThickness="1">
        <Path.Data>
            <MultiBinding Converter="{StaticResource PointsConverter}">
                ...
            </MultiBinding>
        </Path.Data>
    </Path>
</DataTemplate>

最新更新