在 Content Presenter 中显示选定的 ListView 项目

Show selected ListView item in Content presenter

我正在尝试在 ContentPresenter 中显示选定的列表视图项目。

ListView 是从 PlayersViewModel 填充的。呈现 PlayerViewModel 的项目。

现在我想在 ContentPresenter 的 ListView 之外显示选定的 PlayerViewModel。在设计视图中,仅显示内容绑定类型。喜欢:PlayersViewModel.CurrentPlayer.

如何使 ContentPresenter 的工作方式与 ListView.ItemTemplate 相同?

提前致谢。

<ListView ItemsSource="{x:Bind PlayersViewModel.Players}" SelectedIndex="{x:Bind PlayersViewModel.Index}" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2">            
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="viewModels:PlayerViewModel">
                <Viewbox>
                    <StackPanel BorderBrush="Black" BorderThickness="1">
                        <TextBlock Text="{x:Bind Name}" />
                        <TextBlock Text="{x:Bind Score, Mode=TwoWay}" />
                    </StackPanel>
                </Viewbox>                    
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <ContentPresenter Grid.Row="0" Grid.Column="1" Content="{x:Bind PlayersViewModel.CurrentPlayer}">
        <ContentPresenter.Resources>
            <DataTemplate x:Key="dataTemplateCurrentPlayer"  x:DataType="viewModels:PlayerViewModel">
                <StackPanel BorderBrush="Black" BorderThickness="1">
                    <TextBlock Text="{x:Bind Name}" />
                    <TextBlock Text="{x:Bind Score, Mode=TwoWay}" />
                </StackPanel>
            </DataTemplate>
        </ContentPresenter.Resources>            
    </ContentPresenter>

您可以使用 ListView 页脚模板显示所选项目的详细信息

<ListView ItemsSource="{x:Bind PlayersViewModel.Players}" SelectedIndex="{x:Bind PlayersViewModel.Index}" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2">            
        <ListView.ItemTemplate>
            <DataTemplate x:DataType="viewModels:PlayerViewModel">
                <Viewbox>
                    <StackPanel BorderBrush="Black" BorderThickness="1">
                        <TextBlock Text="{x:Bind Name}" />
                        <TextBlock Text="{x:Bind Score, Mode=TwoWay}" />
                    </StackPanel>
                </Viewbox>                    
            </DataTemplate>
        </ListView.ItemTemplate>
<ListView.FooterTemplate>

      <DataTemplatex:DataType="viewModels:PlayerViewModel">
            <StackPanel BorderBrush="Black" BorderThickness="1">
                <TextBlock Text="{x:Bind PlayersViewModel.CurrentPlayer.Name}" />
                <TextBlock Text="{x:Bind PlayersViewModel.CurrentPlayer.Score, Mode=TwoWay}" />
            </StackPanel>
        </DataTemplate>
 </ListView.FooterTemplate>
</ListView>

或者其他方法是您可以只使用 Stackpanel

   <StackPanel BorderBrush="Black" BorderThickness="1">
                    <TextBlock Text="{x:Bind PlayersViewModel.CurrentPlayer.Name}" />
                    <TextBlock Text="{x:Bind PlayersViewModel.CurrentPlayer.Score, Mode=TwoWay}" />
                </StackPanel>

希望这有效..

<UserControl x:Class="App1.MyUserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="using:App1"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             mc:Ignorable="d"
             d:DesignHeight="300"
             d:DesignWidth="400">

  <UserControl.Resources>
    <DataTemplate x:DataType="viewModels:PlayerViewModel"
                  x:Key="PlayerTemplate">
      <Viewbox>
        <StackPanel BorderBrush="Black"
                    BorderThickness="1">
          <TextBlock Text="{x:Bind Name}" />
          <TextBlock Text="{x:Bind Score, Mode=TwoWay}" />
        </StackPanel>
      </Viewbox>
    </DataTemplate>
  </UserControl.Resources>
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="0.5*" />
      <ColumnDefinition Width="0.5*" />
    </Grid.ColumnDefinitions>
    <ListView ItemsSource="{x:Bind PlayersViewModel.Players}"
              SelectedIndex="{x:Bind PlayersViewModel.Index}"
              ItemTemplate="{StaticResource PlayerTemplate}" />

    <ContentControl Grid.Column="1"
                    Content="{x:Bind PlayersViewModel.CurrentPlayer}"
                    ContentTemplate="{StaticResource PlayerTemplate}" />
  </Grid>
</UserControl>