【问题标题】:XAML: Binding fiasco with a DataTemplate within a ListView within a DataTemplateXAML:将失败与 DataTemplate 内 ListView 内的 DataTemplate 绑定
【发布时间】:2011-08-16 00:51:04
【问题描述】:

您好,我有一个 ViewModel 的数据模板。

在这个 DataTemplate 中,我得到了一个绑定到模板集合的 ListView,并且在其中我无法设置集合中项目的属性。

该属性的可用设置位于原始 ViewModel 的另一个集合中,但我很难绑定到它。

<DataTemplate DataType="{x:Type ViewModel}">

    <!-- Some irrelevant property bindings -->

    <ListView ItemsSource="{Binding Path=TheCollection}">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding RelativeSource={RelativeSource SOMEAPPROPRIATERELATIVESOURCE}, 
                                           Path=AvailablePropertiesCollection}"  SelectedItem="{Binding Path=TheProperty}" />
                </DataTemplate>
            </ListView.ItemTemplate>
    </ListView>

有没有什么好方法可以绑定到顶级 DataTemplate 的项?

【问题讨论】:

    标签: xaml binding combobox relativesource


    【解决方案1】:

    我相信你会想使用:

    ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListView}}, 
        Path=DataContext.AvailablePropertiesCollection}"
    

    这将绑定到 ListView 的数据上下文中的 AvailablePropertiesCollection。

    【讨论】:

    • 因此 ListView 将项目作为 DataContext 包装在 DataTemplate 中。有道理,我会检查一下,如果有效,然后给你正确的答案。
    • @Ingó - 是的,DataTemplate 中的任何内容都会获得一个新的“数据上下文”。在这种情况下,它将是 ItemsSource 中的项目。听起来您需要获取 ListView 的数据上下文,这就是我所描述的。
    • 完美运行,如此简单,我应该明白这一点。精通 XAML 需要一生的时间。谢谢。
    • 尝试奖励赏金会提前 23 小时通知我,你知道这是怎么回事吗?
    • @Ingó - 我认为您必须等待一两天,但不要担心或着急。
    猜你喜欢
    • 2016-11-30
    • 2012-09-21
    • 2019-04-13
    • 2012-11-14
    • 2011-07-21
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-09
    相关资源
    最近更新 更多