取消/订阅 Xamarin 内容视图中的事件

Posted

技术标签:

【中文标题】取消/订阅 Xamarin 内容视图中的事件【英文标题】:Un/Subscribe to events in Xamarin Content View 【发布时间】:2021-03-25 04:18:06 【问题描述】:

我的ContentPage 内部有一个TabView,为了保持清洁,我通常将标签放在ContentView

我在这个例子中的ContentView 有几个入口控件。我想订阅控件的TextChanged 事件,以便在页面上显示字符计数器标签。

现在我不确定这是否正确,但我将这些 UI 函数保留在代码中,据我所知它们在 VM 中没有位置。

问题是;在ContentPage 中,当控件隐藏在ContentView 中时,无法获得对控件的引用,如果我尝试将逻辑移至ContentView,则无法访问通常的OnAppearing 和@987654330 @ 方法。我正在使用 MVVMCross,目前我正在使用 OnBindingContextChanged 方法订阅该事件。但是,我看不到页面关闭/弹出时触发的任何内容。

【问题讨论】:

你的意思是 OnAppearing,那些在 ContentViews 中不可用? 是的,这是正确的,这是问题的一部分。 ContentViews 没有生命周期,您需要做一个解决方法。如果您再解释一下具体要求是什么,也许我可以提供帮助 让我知道帖子中不清楚的地方,我会对其进行编辑以使其更清晰。这对我来说似乎很有意义。 订阅ContentViews 中的事件有什么要求?你能简单地通过绑定到视图模型或通过实现行为或附加属性来实现你想要的行为吗? 【参考方案1】:

像往常一样,我想太多了。

我想要实现的是在Entry 中的文本发生更改时简单地更新Label。我将我的 UI 特定代码保留在 XAML 和代码后面,但我在取消/订阅后面代码中的 TextChanged 事件时遇到了问题。

我不知道为什么我以前没有想到这个;只需在 XAML 中连接 TextChanged 事件,而不是在后面的代码中执行它,这样就已经处理了取消订阅。

【讨论】:

我不确定 Binding 是否是正确的前进方式。如果虚拟机只是纯粹的 UI 内容,我会尝试将其排除在外。

以上是关于取消/订阅 Xamarin 内容视图中的事件的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms Switch Toggled 事件未与视图模型绑定

如何处理 Xamarin Forms 中推送通知中的点击事件?

通过在父级上呈现新的视图控制器 viewWillDisappear 在我取消订阅事件时触发

何时取消Xamarin Custom Renderers中的事件

订阅/取消订阅列表中的事件[重复]

从 ViewModel 调用视图中的方法