无法将事件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/