【问题标题】:Caliburn Micro Conductor + TransitioningContentControlCaliburn Micro Conductor + TransitioningContentControl
【发布时间】:2012-05-08 12:11:45
【问题描述】:

我在让我的 CM Conductor 保持 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,并在 transitioniningContentControl 完成转换之前单击 Nav1,即使 ActiveItem 成功设置回 _viewModel1,Nav2 的视图仍将显示在屏幕上。

这会使您处于 ActiveItem 为 _viewModel1 的无效状态,但正在显示的视图绑定到 _viewModel2。

想法?直接绑定到 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  

不确定这是否有帮助。

【问题讨论】:

    标签: c# silverlight caliburn.micro


    【解决方案1】:

    尝试使用 Conductors ActivateItem 方法来设置 ActiveItem 属性。

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

    我希望这会有所帮助

    马丁

    【讨论】:

    • 没关系。 ActiveItem 设置器只是转身并调用 ActivateItem: public T ActiveItem { get { return activeItem; } 设置 { 激活项目(值); } }
    猜你喜欢
    • 2012-01-29
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多