我正在try 向数据模板内的ListViewItem的DoubleTaps事件添加行为.

     <Button.Flyout>
     <Flyout>
         <Grid Height="500">
             <ListView ItemsSource="{x:Bind ViewModel.AvailableProperties, Mode=OneWay}">
                 <ListView.ItemTemplate >
                     <DataTemplate x:DataType="properties:PropertyDefinition">

                         <StackPanel Padding="10,5,10,5" x:Name="listViewItem">

                             <interactivity:Interaction.Behaviors>
                                 <core:EventTriggerBehavior 
                                     EventName="DoubleTapped" 
                                     SourceObject="{Binding ElementName=listViewItem}">

                                     <core:InvokeCommandAction 
                                     Command="{Binding ElementName=bomPage, Path=ViewModel.AddPropertyCommand}" 
                                     CommandParameter="{x:Bind}"/>

                                 </core:EventTriggerBehavior>
                             </interactivity:Interaction.Behaviors>

                             <TextBlock Text="{x:Bind PropertyName}" />
                             <TextBlock Text="{x:Bind PropertySetName}" />
                         </StackPanel>

                     </DataTemplate>
                 </ListView.ItemTemplate>
             </ListView>
         </Grid>
     </Flyout>
 </Button.Flyout>

当我将堆栈板移出数据模板时,行为正常,但当它在数据模板内时就不起作用了.我做错什么了吗?可以像我try 的那样附加这种行为吗?

推荐答案

恐怕不能在DataTemplate中使用ElementName属性绑定到父Page,因为元素驻留在不同的XAML命名作用域中.

不过,您可以从视图的代码隐藏中调用该命令:

private void listViewItem_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
{
    StackPanel stackPanel = sender as StackPanel;
    ViewModel.AddPropertyCommand.Execute(stackPanel?.DataContext);
}

XAML:

<StackPanel Padding="10,5,10,5" x:Name="listViewItem"
            DoubleTapped="listViewItem_DoubleTapped">

    <TextBlock Text="{x:Bind PropertyName}" />
    <TextBlock Text="{x:Bind PropertySetName}" />
</StackPanel>

从MVVM的Angular 来看,这并不比使用InvokeCommandAction更糟糕.完全相同的视图调用完全相同的view Model命令--实际上是以一种更简单的方式.

Csharp相关问答推荐

在Microsoft XNA框架(MonoGame)中旋转相机

将委托传递到serviceccollection c#web API

. NET JSON属性自定义所需逻辑

附加标题不起作用,而添加则起作用

如何通过属性初始化器强制初始化继承记录内的属性?

.NET SDK包中的官方C#编译器在哪里?

有空容错运算符的对立面吗?

该函数不能检测两条曲线的交点

如何返回具有泛型的类?

如何避免在.NET中将日志(log)写入相对路径

在C#中,当输入一个方法/局部函数时,我的IEnumerator被重置/重新创建.为什么?

类/值和日期的泛型方法

Maui:更改代码中的绑定字符串不会更新UI,除非重新生成字符串(MVVM)

WPF:如何从DatagridHeader的内容模板绑定到词典项

使用postman 测试配置了身份的.NET 6应用程序

我是否以错误的方式使用了异步延迟初始化?

如何获取我在SQL中输入的值

无法停止PowerShell中的低级挂钩(c#挂钩)

ASP.NET核心中的验证错误-该字段为必填字段

使用c#中的Windows 10关机消息