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);