在一个WinUI 3应用程序中,使用CommunityToolkit.mvvm,我有一个 XXXPage,它有一个 ListDetailsView。
我为ListDetailsView DetailsTemplate定义了一个DateTemplate,其中包含一个用户控件:* XXX详细控制 *。
我尝试将XXXDetailControl的InstallClicked事件绑定到页面的ViewModel InstallCommand,但没有成功。
<DataTemplate x:Key="DetailsTemplate">
<Grid>
<views:XXXDetailControl
DetailMenuItem="{Binding}"
InstallClicked="{ ???? }" />
</Grid>
...
</DataTemplate>
如何设置此绑定,以便将DataTemplate中定义的控件的事件绑定到page viewmodel命令?如何设置此绑定,以便将选定项与事件一起发送?
XXX第.xaml页:
<Page
x:Class="XXXPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:models="using:XXX.Models"
xmlns:views="using:XXX.Views"
xmlns:behaviors="using:XXX.Behaviors"
xmlns:controls="using:CommunityToolkit.WinUI.UI.Controls"
xmlns:viewmodels="using:XXX.ViewModels"
behaviors:NavigationViewHeaderBehavior.HeaderMode="Never"
mc:Ignorable="d">
<Page.Resources>
...
<DataTemplate x:Key="DetailsTemplate">
<Grid>
<views:XXXDetailControl
DetailMenuItem="{Binding}"
InstallClicked="{Binding ViewModel.InstallCommand, ElementName=?}" CommandParameter="{x:Bind (viewmodels:XXXDetailViewModel)}" />
</Grid>
...
</DataTemplate>
</Page.Resources>
<Grid x:Name="ContentArea">
...
<controls:ListDetailsView
x:Uid="ListDetails"
x:Name="ListDetailsViewControl"
DetailsTemplate="{StaticResource DetailsTemplate}"
ItemsSource="{x:Bind ViewModel.Items}"/>
</Grid>
</Page>
XXX第.cs页:
public sealed partial class XXXPage: Page
{
public XXXViewModel ViewModel
{
get;
}
public XXXPage()
{
ViewModel = App.GetService<XXXViewModel >();
InitializeComponent();
}
}
XXX视图模型:
public class XXXViewModel : ObservableRecipient, INavigationAware
{
private XXXDetailViewModel? _selected;
public XXXDetailViewModel? Selected
{
get => _selected;
set
{
SetProperty(ref _selected, value);
}
}
public ObservableCollection<XXXDetailViewModel> Items { get; private set; } = new ObservableCollection<XXXDetailViewModel>();
public ICommand InstallCommand;
}
2条答案
按热度按时间yqyhoc1h1#
如果您可以在使用者控件内使用
Command
和CommandParameter
,就可以这样做。详细信息控件. xaml.cs
详细信息控件.xaml
主页面视图模型.cs
主页面.xaml.cs
主页面.xaml
此页被命名为ThisPage,以便从DataTemplate绑定。
nukf8bse2#
你有没有试着给予
Page
一个这样的Name
?:这似乎适用于
ListView
。