c# - Caliburn Micro Conductor + TransitioningContentControl

标签 c# silverlight caliburn.micro

我在让我的 CM Conductor 保持 Active 与 TransitioningContentControl 内容的正确绑定(bind)时遇到问题。

以防万一,我使用的是 Conductor<Screen>.Collection.OneActive

重现问题的步骤

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

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

创建两个按钮:

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

在 View 模型中,连接 Nav1 和 Nav2 点击事件以设置事件项

public void Nav1()
{
    ActiveItem = _viewModel1;
}

public void Nav2()
{
    ActiveItem = _viewModel2;
}

乍一看,这似乎工作正常 - 但存在问题。假设事件项表示 Nav1 (_viewModel1)。

如果您随后单击 Nav2,并在 transitioniningContentControl 完成转换之前单击 Nav1,则 Nav2 的 View 仍将显示在屏幕上,即使 ActiveItem 已成功设置回 _viewModel1。

这会使您处于无效状态,其中 ActiveItem 是 _viewModel1,但显示的 View 绑定(bind)到 _viewModel2。

想法?直接绑定(bind)到ActiveItem有什么问题吗?

编辑:

关闭“仅我的代码”调试后,我看到在转换期间设置 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);
}

希望对你有帮助

马丁

关于c# - Caliburn Micro Conductor + TransitioningContentControl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355823/

相关文章:

c# - 在 Windows Phone 8.1 应用程序中过滤 ListView

Silverlight 图像 : load URL dynamically?

c# - WCF RIA 服务超时

silverlight - Caliburn.Micro:记录每个 ActionMessage?

c# - C#中 bool 值到字符串值的转换

c# - 阻止 WPF InkBrush 引起滚动事件

.net - HTML5 如何处理能够像 Silverlight 那样运行 .NET 托管代码的问题?

mvvm - 在 Caliburn Bootstrapper Configure() 中显示 MessageBox

silverlight - 找不到 View 模型的 View ?

c# - 可互换多键词典