【问题标题】:windows store app, bind to parent gridview propertywindows 商店应用程序,绑定到父 gridview 属性
【发布时间】:2023-03-14 06:19:01
【问题描述】:

如何从 itemTemplate gridview 绑定父属性?

<GridView ItemsSource="{Binding UsersViewModel}" ItemTemplate="{StaticResource UsersTemplate}">            

<DataTemplate x:Key="UsersTemplate">        
        <ListView VerticalAlignment="Top" ItemsSource="{Binding Users}"
                  Height="{Binding Window.Current.Bounds.Height}"   
                  Width="{Binding PARENT?.ColWidth}"
                  ScrollViewer.VerticalScrollBarVisibility="Visible"                    
                  ItemTemplateSelector="{StaticResource UserTemplateSelector}"
                  ItemContainerStyle="{StaticResource LvItemStyle}" >
        </ListView>        
</DataTemplate>

ColWidth 属性在 UsersViewModel 中定义

【问题讨论】:

  • UsersViewModel 是具有 ColWidth 属性的对象列表吗?
  • 这是一种解决方法,但我想知道是否可以直接从子项获取父属性
  • 从技术上讲,您只需编写 Width={Binding ColWidth}。但是在 UsersViewModel 中的每个对象中都必须有一个名为 ColWidth 的属性。

标签: c# xaml windows-store-apps


【解决方案1】:

关于您的 Xaml 代码的某些内容感觉不对,因为您将GridViewItemSource 绑定到感觉就像property 而不是集合的UsersViewModel ! (ItemSource 应该绑定到一个集合)。 如果UsersViewModel 确实是一个包含ColWidth 属性的类对象的集合,那么DataTemplate 内的简单绑定就可以解决问题,

Width="{Binding ColWidth}"

现在,如果 UsersViewModelGridViewDataContext,那么您的代码可能应该是这样的,

<GridView DataContext="{Binding UsersViewModel}" ItemsSource="{Binding ACollectionInsideUsersViewModel}" ItemTemplate="{StaticResource UsersTemplate}">

在这种情况下,如果 ColWidth 属性是在 UsersViewModel 对象内定义的,那么从子对象访问父 DataContext 的最简单方法是使用 ElementName 绑定:

 <GridView DataContext="{Binding UsersViewModel}" ItemsSource="{Binding ACollectionInsideUsersViewModel}" Name="gridView">
        <GridView.ItemTemplate>
            <DataTemplate >
                <ListView VerticalAlignment="Top" ItemsSource="{Binding Users}"
              Height="{Binding Window.Current.Bounds.Height}"   
              Width="{Binding DataContext.ColWidth,ElementName=gridView}"
              ScrollViewer.VerticalScrollBarVisibility="Visible"                    
              ItemTemplateSelector="{StaticResource UserTemplateSelector}"
              ItemContainerStyle="{StaticResource LvItemStyle}" >
                </ListView>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>

【讨论】:

  • 是的,我的代码没有正确填写,因为我更改了示例的变量并提高了可读性。但这不是这里的问题。我知道我可以使用 ElementName 访问父数据上下文,但我的数据模板是在资源文件中定义的
  • 只要您尊重您自己的命名,ElementName 绑定可以从资源文件中正常工作!
  • 哦,我不知道这样工作。谢谢你的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多