DataBinding ListView ItemTemplate UserControl

时间:2016-05-23 17:03:33

标签: xaml win-universal-app

我的Windows Universal页面上有一个ListView。我使用UserControl来定义我的ItemTemplate,以便我可以使用RelativePanel和VisualStateManager来控制我的项目的显示方式,具体取决于屏幕大小...

<ListView ItemsSource="{Binding Path=AllThings}"
          ItemContainerStyle="{StaticResource ListViewItemStyle}">
    <ListView.ItemTemplate>
         <DataTemplate>
             <local:CrossingControl />
         </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我的UserControl中有一个按钮,我想将其Command绑定到ViewModel中的命令属性,该属性是列表本身的DataContext ...

<UserControl ...>
    <RelativePanel>
    <StackPanel x:Name="crossedEntryPanel">
        <Button Command="{Binding DataContext.DeleteCommand,
                          RelativeSource={RelativeSource Mode=TemplatedParent}}"
                                    CommandParameter="{Binding}"

我尝试过使用ElementName绑定,但它似乎不起作用(我想因为我的listview元素名称是在另一个xaml文件中定义的)。我也尝试了上面的RelativeSource绑定,但这似乎也没有用。我怎样才能正确绑定它?

1 个答案:

答案 0 :(得分:2)

您可以使用Tag属性保存DataContext的{​​{1}}并在ListView中使用

这是怎么做的

UserControl

RelativeSource = {RelativeSource Mode = TemplatedParent}}“: - 这指向<ListView ItemsSource="{Binding Path=AllThings}" x:Name="listview" ItemContainerStyle="{StaticResource ListViewItemStyle}"> <ListView.ItemTemplate> <DataTemplate> <local:CrossingControl Tag="{Binding DataContext,ElementName=listview}" /> </DataTemplate> </ListView.ItemTemplate> </ListView> <UserControl x:Name="usercontrol" ...> <RelativePanel> <StackPanel x:Name="crossedEntryPanel"> <Button Command="{Binding Tag.DeleteCommand,ElementName=usercontrol}" CommandParameter="{Binding}" 的{​​{1}}