C# 将绑定替换为 x:Bind(将 UWP 迁移到 WinUI 3)
C# replace Binding with x:Bind (Migrate UWP to WinUI 3)
我有一个 Page.Resources 数据模板,我在那里指定了一个 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。
在 DataTemplate
中,您只能使用 x:Bind
绑定到由 x:DataType
属性指定类型的 属性。
您不能从 DataTemplate
内部 x:Bind
到视图模型 属性 因此,在这种情况下,不可能或不支持使用 x:Bind
绑定CommandParameter
属性 到一个 属性 的视图模型。您应该坚持使用 {Binding}
标记。
我有一个 Page.Resources 数据模板,我在那里指定了一个 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。
在 DataTemplate
中,您只能使用 x:Bind
绑定到由 x:DataType
属性指定类型的 属性。
您不能从 DataTemplate
内部 x:Bind
到视图模型 属性 因此,在这种情况下,不可能或不支持使用 x:Bind
绑定CommandParameter
属性 到一个 属性 的视图模型。您应该坚持使用 {Binding}
标记。