【问题标题】:Data Binding or DataContext issue when binding a ListView from multiple sources绑定来自多个源的 ListView 时出现数据绑定或 DataContext 问题
【发布时间】:2013-05-19 02:50:59
【问题描述】:

我不知道如何将我的列表视图绑定到我的 ViewModel 中的属性和我的视图模型中的列表。

是否可以覆盖 ListViews ItemsSource 并将 ListView 中的 Checkbox 直接绑定到父 ViewModel?

这样的……

        <ListView ItemsSource="{Binding Path=SomeListInViewModel}">
            <ListView.View>
                <GridView>
                    <GridViewColumn>
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <DockPanel>
                                    <CheckBox 
                                        IsEnabled="{Binding SomePropertyInViewModel}" 
                                        IsChecked="{Binding SomePropertyInsideListObj, Mode=TwoWay}" />
                                </DockPanel>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>

【问题讨论】:

标签: wpf xaml binding datacontext


【解决方案1】:

有两种可能的方法:

1) 为 ListView 命名

<ListView x:Name="MyListView" ItemsSource="{Binding Path=SomeListInViewModel}">

然后在绑定上使用 ElementName 属性

IsEnabled="{Binding ElementName=MyListView, Path=Whatever}" 

2) 在绑定中使用RelativeSource

IsEnabled="{Binding Path=Whatever, RelativeSource={RelativeSource AncestorType={x:Type ListView}}}" 

在这两种情况下,如果您的视图模型设置为 ListView 的 DataContext,则路径将类似于 DataContext.SomePropertyInViewModel

【讨论】:

  • 不确定我是否关注你...我可以使用 ItemsSource 将列表 obj 绑定到我的视图 OK,我不能做的是将 IsEnabled 属性设置为我的 VM 上的一个值,因为它直接进入列表属性。 VM是窗口的数据上下文,我用的是MVVMLight框架。
  • 您需要注意的是绑定的“来源”部分。 ItemsControls 设置每个项目的 DataContext 属性,并且在没有任何其他源规范的情况下,绑定使用 DataContext 作为它们的源。我上面概述的是指定来源的两种不同方式。我可以为您澄清什么?
  • 另外,本指南的结尾对指定绑定源的不同选项有很好的描述。 msdn.microsoft.com/en-us/library/ms746695.aspx
  • 谢谢,这有帮助。当我使用 MVVMLight 定位器用作 VM 的数据上下文时,我只需要执行以下操作:IsEnabled="{Binding ViewModel.Property, Source={StaticResource Locator}}"
  • @baileyswalk 感谢您的提示。您的评论也帮助我解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
相关资源
最近更新 更多