数据绑定 ListView ItemTemplate UserControl

Sim*_*ams 2 xaml win-universal-app

我的 Windows 通用页面上有一个 ListView。我使用 UserControl 来定义我的 ItemTemplate,以便我可以使用relativepanel 和 VisualStateManager 来控制我的项目根据屏幕尺寸的显示方式...

<ListView ItemsSource="{Binding Path=AllThings}"
          ItemContainerStyle="{StaticResource ListViewItemStyle}">
    <ListView.ItemTemplate>
         <DataTemplate>
             <local:CrossingControl />
         </DataTemplate>
    </ListView.ItemTemplate>
</ListView>
Run Code Online (Sandbox Code Playgroud)

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

<UserControl ...>
    <RelativePanel>
    <StackPanel x:Name="crossedEntryPanel">
        <Button Command="{Binding DataContext.DeleteCommand,
                          RelativeSource={RelativeSource Mode=TemplatedParent}}"
                                    CommandParameter="{Binding}"
Run Code Online (Sandbox Code Playgroud)

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

Arc*_*ana 5

您可以使用属性Tag来保存并在中使用它DataContextListViewUserControl

这是如何完成的

<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}"
Run Code Online (Sandbox Code Playgroud)

relativeSource={RelativeSourceMode=TemplatedParent}}":-controltemplate这指向button