为了账号安全,请及时绑定邮箱和手机立即绑定

CaliburnMicro IsVisibleChanged 不触发

CaliburnMicro IsVisibleChanged 不触发

C#
温温酱 2023-09-16 15:07:57
事件IsVisibleChanged无法路由到 ViewModel。可能是什么原因?如果我使用 CodeBehind 将事件作为普通 WPF 事件(无 Caliburn Message.Atach)进行测试,则该事件将按预期触发。Message.Atach如果我使用 UserControl 的其他事件(例如 )测试 Caliburn LayoutUpdated,它们会像 ViewModel 中预期的那样工作。但我无法被IsVisibleChanged解雇到我的 ViewModel。看法<UserControl x:Class="MySetupDeviceConfig.Views.SetupDeviceConfigView"          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"          xmlns:cal="http://www.caliburnproject.org"         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"          mc:Ignorable="d" Visibility="{Binding Visibility}"         d:DesignHeight="450" d:DesignWidth="800"          cal:Message.Attach="[Event IsVisibleChanged] = [Action UcIsVisibleChanged];">    <Grid>    ...视图模型public class SetupDeviceConfigViewModel : Screen{    private Visibility _Visibility;    private ILogger Log { get; set; }    public Visibility Visibility { get => _Visibility; set { _Visibility = value; NotifyOfPropertyChange(); } }    // ...    public void UcIsVisibleChanged()    {        Log.LogInformation("IsVisibleChanged");    }使用 Caliburn.Micro v4.0.62-alpha 和 CaliburnMicro v3.2.0 进行测试例如,更改为Loaded具有相同操作/功能映射的视图中的事件 -> 它可以工作。所以不存在类型不匹配...    cal:Message.Attach="[Event Loaded] = [Action UcIsVisibleChanged];">
查看完整描述

3 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

其不起作用的原因是这IsVisibleChanged是一个 CLR 事件而不是路由事件。

Caliburn.Micro 的消息系统适用于路由事件而不是 CLR 事件。由于Caliburn.MicroEventTrigger内部使用。

为什么不直接绑定到IsVisible


查看完整回答
反对 回复 2023-09-16
?
万千封印

TA贡献1891条经验 获得超3个赞

难道你的财产不需要被调用IsVisible而不是Visibility?或者,将调用NotifyOfPropertyChange从默认更改为NotifyOfPropertyChange("IsVisible")



查看完整回答
反对 回复 2023-09-16
?
烙印99

TA贡献1829条经验 获得超13个赞

尝试将操作放置在GridUserControl 内的第一个元素( )上,而不是放在 UserControl 本身上。我自己尝试了一下,它似乎在网格上工作,但在用户控件本身上不起作用,可能是 Caliburn 错误吗?

我还注意到,当我在代码隐藏中切换网格的可见性时,该事件没有被触发,但是当我将可见性依赖属性绑定到 ViewModel 中的属性时,它起作用了!看起来像是 Caliburn 中的另一个错误。

我认为将事件和绑定放置在 UserControl 内部的控件上而不是 UserControl 本身通常是一个很好的做法。如果 UserControl 从外部隐藏,则其内部的 Grid 无论如何都应该触发可见性事件,因此实际上没有什么区别。


查看完整回答
反对 回复 2023-09-16
  • 3 回答
  • 0 关注
  • 107 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信