【问题标题】:Caliburn.Micro WindowManager Cannot find viewCaliburn.Micro WindowManager 找不到视图
【发布时间】:2014-02-26 18:49:32
【问题描述】:

我进行了一些搜索,但找不到遇到我特定问题的人。

我有一个 Caliburn.Micro 项目,并且我成功地拥有了一个主视图,其中包含子视图,这不是问题。我的视图模型与我的视图在不同的程序集中。

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

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

        return assemblies;
    }

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

但是,当我开始使用窗口管理器来显示一个新的视图/视图模型时,它会被传递到订单视图中。我得到一个带有文本“无法找到 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?

【问题讨论】:

    标签: c# wpf mvvm caliburn.micro caliburn


    【解决方案1】:

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

    要查看是否是同样的问题,请尝试更改呼叫来自

    windowManager.ShowWindow(new PriceBandSelectionViewModel(this)); 
    

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

    在我的例子中,ShowDialog 能够找到视图没有问题,但 ShowWindow 和 ShowPopup 却没有。

    【讨论】:

      【解决方案2】:

      您是否尝试过删除 OrderViewModel 或在此处设置断点,如果在初始化导出的类时遇到错误,可能会出现找不到视图错误

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

      或添加

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

      【讨论】:

        猜你喜欢
        • 2015-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多