无法将事件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];">

最佳答案

您的财产不需要称为IsVisible而不是Visibility吗?或者,将呼叫从默认值更改为NotifyOfPropertyChange

关于c# - CaliburnMicro IsVisibleChanged不会触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57607841/

10-09 08:13