Caliburn.Micro WindowManager Не удается найти представление

Я провел некоторые поиски, и я не могу найти никого с моей конкретной проблемой.

У меня есть проект Caliburn.Micro, и у меня успешно есть главное представление с вложенными представлениями внутри, которое не является проблемой. Мои модели просмотра находятся в другой сборке с моими видами.

Это означало, что мне пришлось переопределить SelectAssemblies, чтобы включить мой проект моделей представлений:

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

        return assemblies;
    }

Вот тут-то и начинается мое замешательство. У меня успешно есть OrderView, показывающий OrderViewModel. Внутри этого есть KeyboardViewModel с KeyboardView. Это все работает нормально, поэтому калибр находит нужные сборки и т. Д.

Однако, когда я прихожу использовать оконный менеджер для отображения нового представления / модели представления, которое передается в представление заказа. Я получаю экран с текстом "Не удается найти модель представления для 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 ответа

Это может быть та же проблема, что и у меня, как описано здесь: Caliburn.Micro HelloWindowManager Sample - Просмотр местоположения не работает

Чтобы увидеть, если это та же проблема, попробуйте изменить вызов с

windowManager.ShowWindow(new PriceBandSelectionViewModel(this)); 

в

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

В моем случае ShowDialog смог найти представление без проблем, но ShowWindow и ShowPopup не было.

Если вы пытались удалить OrderViewModel или поставить точку останова, ошибка просмотра не может быть найдена, если возникла ошибка при инициализации экспортированного класса

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

или добавить

assemblies.Add(typeof(PriceBandSelectionViewModel).Assembly);
Другие вопросы по тегам