我希望绑定到WPF中列表中的列表

时间:2019-04-24 12:01:30

标签: c# wpf mvvm binding viewmodel

我已将ItemsSource中的ItemsControl绑定到一个称为LDLTracks的ViewModel列表。在LDLTrack视图模型中,有一个我希望绑定到的坐标对象的列表,但是我不确定该使用哪种正确的方法。

我可以通过将画布绑定到TrackViewModels列表,然后在我的

中进行此操作

XAML:

<ItemsControl ItemsSource="{Binding LDLTracks}">
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <Canvas/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>

                    <ItemsControl.ItemTemplate>
                        <DataTemplate>

                            <Line  X1="{Binding X1}" Y1="{Binding Y1}" X2="{Binding X2}" Y2="{Binding Y2}" Stroke="{Binding LineColor}" StrokeThickness="5">
                                <Line.InputBindings>
                                    <MouseBinding Gesture="LeftClick" Command="{Binding FooCommand}"/>
                                </Line.InputBindings>
                            </Line>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>

我希望将{Binding X1}替换为“坐标列表”,因此理想情况下应为“ Coordinates.X1”,因为“坐标”是一个列表,但是当我尝试绑定到的唯一属性是“坐标”时列表计数。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用绑定到ItemsControl列表的内部/嵌套Coordinates

<ItemsControl ItemsSource="{Binding LDLTracks}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas/>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding Coordinates}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <Line X1="{Binding X1}" Y1="{Binding Y1}" X2="{Binding X2}" Y2="{Binding Y2}"
                              Stroke="{Binding LineColor}" StrokeThickness="5">
                            <Line.InputBindings>
                                <MouseBinding Gesture="LeftClick" Command="{Binding FooCommand}"/>
                            </Line.InputBindings>
                        </Line>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>