【问题标题】:I wish to bind to a list within a list in WPF我希望绑定到 WPF 列表中的列表
【发布时间】:2019-04-24 12:01:30
【问题描述】:

我已将ItemsControl 中的ItemsSource 绑定到名为LDLTracks 的ViewModel 列表。在 LDLTrack 视图模型中,有一个我希望绑定到的坐标对象的列表,但是我不确定执行它的正确方法。

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

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,因为坐标将是一个列表,但是当我尝试唯一可以绑定的属性是坐标列表计数时.有什么想法吗?

【问题讨论】:

  • 如果您需要在数据模板中重复一个列表,您需要另一个 ItemsControl - LDLTracks 中的每个 LDLTrack 对象将被第一个 ItemsControl 重复,但子列表也需要自己的中继器/数据模板。我假设您想要外部列表中所有坐标对象的列表(嵌套列表?)
  • 所以你想在LDLTracks 中为每个对象显示几个Line 元素,对吧?
  • 没错@mm8
  • 我明白了,您介意对它的语法进行破解,以便如果您有时间我可以稍微了解一下吗?非常感谢@Charleh
  • 有人已经发布了那个确切的例子!

标签: c# wpf mvvm binding viewmodel


【解决方案1】:

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

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

【讨论】:

  • 很抱歉再次打扰您,但是如果命令位于我的 LDLTracks 中,您不会碰巧知道鼠标绑定中命令的语法吗?我试过了:&lt;MouseBinding Gesture="LeftClick" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type viewModel:LDLTrackViewModel}}, Path=FooCommand}"/&gt; 但它似乎不起作用。非常感谢!
  • @danny10846:如果您还有其他问题,请提出一个新问题。不要在 cmets 字段中发布其他问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 2017-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多