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 代码有些地方感觉不对,因为您将 GridView
的 ItemSource
绑定到 UsersViewModel
感觉像是 property
而不是 Collection ! (ItemSource
应该绑定到一个集合)。
如果 UsersViewModel
确实是一个 class 对象的集合,其中包含 ColWidth
属性,那么 DataTemplate
中的简单绑定应该可以解决问题,
Width="{Binding ColWidth}"
现在,如果 UsersViewModel
是 GridView
的 DataContext
,那么您的代码可能应该看起来像这样,
<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>
如何从 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 代码有些地方感觉不对,因为您将 GridView
的 ItemSource
绑定到 UsersViewModel
感觉像是 property
而不是 Collection ! (ItemSource
应该绑定到一个集合)。
如果 UsersViewModel
确实是一个 class 对象的集合,其中包含 ColWidth
属性,那么 DataTemplate
中的简单绑定应该可以解决问题,
Width="{Binding ColWidth}"
现在,如果 UsersViewModel
是 GridView
的 DataContext
,那么您的代码可能应该看起来像这样,
<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>