在自定义视图单元中创建可绑定事件处理程序

Posted

技术标签:

【中文标题】在自定义视图单元中创建可绑定事件处理程序【英文标题】:Create bindable event handler in custom view cell 【发布时间】:2019-02-07 14:50:36 【问题描述】:

按照 Microsoft 文章 Customizing View Cell,我为 UWP 的列表视图中使用的视图单元创建了本机 ViewCellRenderer。 本文解释了如何为可以使用本机控件显示的视图单元格创建可绑定属性。我想要的是能够创建一个可绑定的事件处理程序,以便我可以将此事件与本机 UWP 代码绑定,例如 Textblock 的 Tapped 事件。

示例- 在 Textblock 'Name' 的点击事件上,我想导航到另一个页面。导航逻辑写在我使用带有自定义视图单元的列表视图的页面的视图模型中。如何在自定义视图单元格中创建可绑定事件处理程序,以便将其与本机代码的 Tapped 事件绑定。

【问题讨论】:

请展示并包含您正在处理的内容。 【参考方案1】:

我在 Xamarin 中找到了 similar case。我们的团队成员回复了,根据您的要求,关键是使用XamlBehaviors将TextBlock的Tapped事件与自定义视图单元中定义的命令绑定。

Xaml

<Application.Resources>
    <ResourceDictionary>
        <DataTemplate x:Key="ListViewItemTemplate">
            <Grid>                
                <TextBlock Text="Binding TextName" >
                <interactivity:Interaction.Behaviors>
                    <core:EventTriggerBehavior EventName="Tapped">
                        <core:InvokeCommandAction  Command="Binding TappedCommand"/>
                    </core:EventTriggerBehavior>        
                </interactivity:Interaction.Behaviors>
                </TextBlock>
            </Grid>
        </DataTemplate>
    </ResourceDictionary>
</Application.Resources>

然后您可以在TappedCommand 方法中调用导航操作。

【讨论】:

非常感谢,这正是我想要的。还有一个问题是如何将完整模型作为参数传递给上述示例中的命令,因为 CommandParameter="Binding ." 在这种情况下似乎不起作用。 命令参数可以参考this回复。

以上是关于在自定义视图单元中创建可绑定事件处理程序的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义单元格中同步选择文本视图的事件?

如何停止在自定义表格视图单元格中交换数据?

如何通过在自定义视图中按下按钮从超级视图中删除自定义视图?

在自定义表格单元中更改图像视图

在自定义表格单元格内检测多个 UI 视图的点击/触摸的理想方法是啥?

在自定义视图中处理 UITapGestureRecognizer