windows 商店应用,绑定到父 gridview 属性

windows store app, bind to parent gridview property

如何从 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

中定义

您的 Xaml 代码有些地方感觉不对,因为您将 GridViewItemSource 绑定到 UsersViewModel 感觉像是 property 而不是 Collection ! (ItemSource 应该绑定到一个集合)。 如果 UsersViewModel 确实是一个 class 对象的集合,其中包含 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>