gpt4 book ai didi

c# - UWP Master Detail 从 DataTemplate 引用父上下文

转载 作者:太空宇宙 更新时间:2023-11-03 22:48:42 24 4
gpt4 key购买 nike

我无法按照以下草图在 UWP Master/Details 场景中实现删除按钮。

master/details screen layout

我正在使用以下 XAML 生成屏幕,它由一个 ListView 和一个 ContentPresenter 组成,两者都使用 DataTemplate 来绑定(bind)到我的 View 模型。

<Page.Resources>
<DataTemplate x:Key="MasterListViewItemTemplate" x:DataType="vm:ListItemViewModel">
<StackPanel Orientation="Horizontal">
<SymbolIcon Width="48"
Height="48"
Symbol="Contact" />
<TextBlock Margin="8,0"
VerticalAlignment="Center"
Text="{x:Bind Name, Mode=OneWay}" Style="{ThemeResource BaseTextBlockStyle}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="DetailContentTemplate" x:DataType="vm:ListItemViewModel">
<RelativePanel HorizontalAlignment="Left">
<!-- various input controls -->

<!-- Unable to reference command in parent context here -->
<Button x:Name="MasterRemoveButton" Padding="12,0" Command="{Binding RemoveCommand}">Remove</button>

</RelativePanel>
</DataTemplate>
</Page.Resources>
...
<Grid x:Name="RoleMasterDetailGrid">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="MasterColumn" Width="Auto" />
<ColumnDefinition x:Name="DetailColumn" Width="*" />
</Grid.ColumnDefinitions>

<ListView x:Name="MasterListView"
Grid.Column="0"
IsItemClickEnabled="True"
ItemTemplate="{StaticResource MasterListViewItemTemplate}"
ItemsSource="{Binding ListItemViewModels}">
<ListView.Header>
<Button x:Name="MasterAddNewButton" Padding="12,0" Command="{Binding AddNewCommand}">
<StackPanel Orientation="Horizontal">
<SymbolIcon Width="48"
Height="48"
Symbol="AddFriend" />
<TextBlock Margin="8,0"
VerticalAlignment="Center"
Text="Add" Style="{ThemeResource BaseTextBlockStyle}" />
</StackPanel>
</Button>
</ListView.Header>
</ListView>

<ContentPresenter
x:Name="DetailContentPresenter"
Grid.Column="1"
BorderThickness="1,0,0,0"
Padding="20,16"
BorderBrush="{ThemeResource SystemControlForegroundBaseLowBrush}"
Content="{x:Bind MasterListView.SelectedItem, Mode=OneWay}"
ContentTemplate="{StaticResource DetailContentTemplate}" />

</Grid>

但是,RemoveCommand 命令存在于页面 View 模型中,而不是 ListItemViewModel 中,我似乎无法从 中找到引用它的方法ContentPresenter 的 DataTemplate

有人可以建议如何从 DataTemplate 中引用父上下文吗?

最佳答案

所以这可以通过直接引用您知道其数据上下文的元素来实现。它使用 Binding ElementName 并且工作得很好,只要你有自己合适的 naming 并且没有跨组件大量重用 templates .

只需替换代码中的 button 声明即可

<Button x:Name="MasterRemoveButton" Padding="12,0" Command="{Binding RemoveCommand}">Remove</button>

使用以下代码

<Button x:Name="MasterRemoveButton" Content="Remove" Padding="12,0" Command="{Binding ElementName=DetailContentPresenter Path=DataContext.RemoveCommand}"/>

关于c# - UWP Master Detail 从 DataTemplate 引用父上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48670224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com