Caliburn.Micro WindowManager找不到视图

时间:2014-02-03 10:23:17

标签: c# wpf mvvm caliburn.micro caliburn

我做了一些搜索,找不到任何有特定问题的人。

我有一个Caliburn.Micro项目,我成功地拥有一个主视图,里面有子视图,这不是问题。我的视图模型与我的视图不同。

这意味着我必须覆盖SelectAssemblies以包含我的视图模型项目:

protected override IEnumerable<Assembly> SelectAssemblies()
    {
        var assemblies = base.SelectAssemblies().ToList();
        assemblies.Add(typeof(OrderViewModel).Assembly);

        return assemblies;
    }

现在,这是我的困惑开始的地方。我成功地有一个显示OrderViewModel的OrderView。在里面有一个带有KeyboardView的KeyboardViewModel。这一切都很好,所以校准正在寻找合适的组件等。

然而,当我来使用窗口管理器来显示传递给订单视图的新视图/ viewmodel时。我收到一个屏幕,其中包含“无法找到XX.ViewModels.Model的视图模型”。

这是我的OrderViewModel

[Export(typeof(OrderViewModel))]
public class OrderViewModel : Screen
{
        private readonly IWindowManager windowManager;
        private ISession session;

        [ImportingConstructor]
        public OrderViewModel(IWindowManager windowManager, KeyboardViewModel keyboardViewModel)
        {
            TillDatabase.CreateInstance(ApplicationConfiguration.Instance.DatabaseConnectionString);
            this.windowManager = windowManager;
            this.Keyboard = keyboardViewModel;
            this.Keyboard.Order = this;
            this.Keyboard.Home();
        }


        public void ChangePriceBand()
        {
            windowManager.ShowWindow(new PriceBandSelectionViewModel(this));
        }

}

问题是,我甚至在ChangePriceBand中试过这个

 windowManager.ShowWindow(new OrderViewModel(this.windowManager, new KeyboardViewModel()));

这会得到同样的错误。即使视图已经与之前的OrderViewModel关联!!

这是PriceBandSelectionViewModel以防万一。

[Export(typeof(PriceBandSelectionViewModel))]
public class PriceBandSelectionViewModel : Screen
{
    private OrderViewModel order;

    [ImportingConstructor]
    public PriceBandSelectionViewModel(OrderViewModel order)
    {
        this.order = order;
    }

    public ObservableCollection<PriceBandButtonViewModel> Buttons
    {
        get
        {
            var list = new ObservableCollection<PriceBandButtonViewModel>();
            var priceBands = this.order.Session.QueryOver<Application_Model_PriceBand>().List();
            foreach (var priceBand in priceBands)
            {
                PriceBandButtonViewModel button = new PriceBandButtonViewModel(priceBand, this);
                list.Add(button);
            }
            return list;
        }
    }


    public void ProcessButtonClick(Application_Model_PriceBand button)
    {
        this.order.ChangeCurrentPriceBand(button);
        base.TryClose();
    }

}

我真的很困惑Caliburn如何设置我的主视图,但窗口管理器即使它的ViewModel是相同的?

2 个答案:

答案 0 :(得分:0)

您是否尝试删除OrderViewModel或在其中放置断点,如果在初始化导出的类时遇到错误,则无法找到视图错误

public PriceBandSelectionViewModel()
{
    // this.order = order;
}

或添加

assemblies.Add(typeof(PriceBandSelectionViewModel).Assembly);

答案 1 :(得分:0)

这可能与我遇到的问题相同:Caliburn.Micro HelloWindowManager Sample - View location not working

要查看是否存在同样的问题,请尝试从

更改来电
windowManager.ShowWindow(new PriceBandSelectionViewModel(this)); 

windowManager.ShowDialog(new PriceBandSelectionViewModel(this));.  

在我的情况下,ShowDialog能够找到视图没问题,但ShowWindow和ShowPopup没有。