C#用X替换绑定:bind(将UWP迁移到Winui 3)

发布于 2025-01-22 06:22:52 字数 1352 浏览 2 评论 0原文

我有一个page.resources dataTemplate,在那里指定了一个x:datatype。

     <Page.Resources>
         <DataTemplate x:Key="DataPanelTemplate" x:DataType="dataModel:Activity">
    

问题是在此DataTemplate中我有此appbarbutton:

      <AppBarButton Icon="Stop" IsCompact="True" x:Name="cmdStopActivity" >
                    <Interactivity:Interaction.Behaviors>
                        <Core:EventTriggerBehavior EventName="Click">
                            <Core:InvokeCommandAction Command="{Binding ActivitiesViewModel.FinishActivityCommand, Source={StaticResource Locator}}" 
                                                      CommandParameter="{Binding}"/>
                        </Core:EventTriggerBehavior>
                    </Interactivity:Interaction.Behaviors>
                </AppBarButton>
  

如何将InvokeCommandAction命令定义为x:bind?在那里,我需要访问ViewModel,而不是指定的X:DataType。我尝试了一下:

     xmlns:viewModel="using:PnxZeiterfassung.ViewModel"
     x:Bind viewModel:ActivitiesViewModel.FinishActivityCommand
      public RelayCommand<Activity> FinishActivityCommand { get; set; }
      FinishActivityCommand = new RelayCommand<Activity>(async (a) => await FinishActivity(a));

但是在这里尚未认识到FinishActivityCommand。

I have a Page.Resources Datatemplate, there I specify an x:DataType

     <Page.Resources>
         <DataTemplate x:Key="DataPanelTemplate" x:DataType="dataModel:Activity">
    

the problem is in this DataTemplate I have this AppBarButton:

      <AppBarButton Icon="Stop" IsCompact="True" x:Name="cmdStopActivity" >
                    <Interactivity:Interaction.Behaviors>
                        <Core:EventTriggerBehavior EventName="Click">
                            <Core:InvokeCommandAction Command="{Binding ActivitiesViewModel.FinishActivityCommand, Source={StaticResource Locator}}" 
                                                      CommandParameter="{Binding}"/>
                        </Core:EventTriggerBehavior>
                    </Interactivity:Interaction.Behaviors>
                </AppBarButton>
  

How can I define the InvokeCommandAction Command as x:Bind? There I need access to the ViewModel and not to the specified x:DataType. I tryed this:

     xmlns:viewModel="using:PnxZeiterfassung.ViewModel"
     x:Bind viewModel:ActivitiesViewModel.FinishActivityCommand
      public RelayCommand<Activity> FinishActivityCommand { get; set; }
      FinishActivityCommand = new RelayCommand<Activity>(async (a) => await FinishActivity(a));

but here the FinishActivityCommand is not recognized.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

调妓 2025-01-29 06:22:52

datatemplate中,您只能使用x:bind绑定到x:datatype属性的类型的属性。

您不能x:binddatatemplate内部绑定到视图模型属性,因此,在这种情况下,使用x:bind 将命令参数属性绑定到视图模型的属性。您应该坚持使用{binding}标记。

In a DataTemplate, you can only use x:Bind to bind to a property of the the type specified by the x:DataType attribute.

You cannot x:Bind to a view model property from inside a DataTemplate so, in this case, it's not possible or supported to use x:Bind to bind the CommandParameter property to a property of the view model. You should stick with the {Binding} markup.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文