卡利本微导体 + 过渡内容控制

本文关键字:内容控制 | 更新日期: 2023-09-27 18:32:33

我在让我的 CM 导体保持 Active 与 TransitioningContentControl 内容的正确绑定时遇到问题。

万一重要,我正在使用Conductor<Screen>.Collection.OneActive

重现问题的步骤

创建一个绑定到导体 ActiveItem 的 TransitioningContentControl:

<toolkit:TransitioningContentControl x:Name="ActiveItem" />

创建两个按钮:

<Button x:Name="Nav1" Content="Test1"></Button>
<Button x:Name="Nav2" Content="Test2"></Button>

在视图模型中,连接 Nav1 和 Nav2 单击事件以设置活动项

public void Nav1()
{
    ActiveItem = _viewModel1;
}
public void Nav2()
{
    ActiveItem = _viewModel2;
}

乍一看,这似乎工作正常 - 但是有一个问题。 假设活动项表示 Nav1 (_viewModel1(。

如果随后单击 Nav2,并在转换内容

控件完成转换之前单击 Nav1,则即使 ActiveItem 将成功设置回_viewModel1,Nav2 的视图仍将显示在屏幕上。

这会使您处于无效状态,其中 ActiveItem 处于_viewModel1状态,但显示的视图绑定了_viewModel2。

想法? 直接绑定到活动项有什么问题吗?

编辑:

关闭"仅我的代码"调试后,我看到在转换期间设置 ActiveItem 时会抛出一个 ArgumentException。 堆栈跟踪显示:

at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
(lots of junk)
Caliburn.Micro!Caliburn.Micro.View.SetContentPropertyCore(object targetLocation, object view) + 0xec bytes  
Caliburn.Micro!Caliburn.Micro.View.SetContentProperty(object targetLocation, object view) + 0x84 bytes  
Caliburn.Micro!Caliburn.Micro.View.OnModelChanged(System.Windows.DependencyObject targetLocation, System.Windows.DependencyPropertyChangedEventArgs args) + 0xda bytes  

不确定这是否有帮助。

卡利本微导体 + 过渡内容控制

尝试使用

Conductors ActivateItem 方法来引导 ActiveItem 属性。

public void Nav1()
{
    ActiveItem(_viewModel1);
}

我希望这会有所帮助

马丁