【发布时间】:2019-12-27 16:33:17
【问题描述】:
事件IsVisibleChanged 无法路由到 ViewModel。可能是什么原因?
如果我使用 CodeBehind 将事件作为普通 WPF 事件(没有 Caliburn Message.Atach)进行测试,则事件会按预期触发。如果我正在测试 Caliburn Message.Atach 与 UserControl 的其他事件(如 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];">
【问题讨论】:
标签: c# events caliburn.micro