(Используется WPF, Catel, Telerik UI)Ошибка «Не удалось построить представление„View Name“с нагнетательных и пустой конструктор» в публикации проекта
Здравствуйте, проблема в следующем, когда я пытаюсь для компиляции проекта, когда программа запускается в определенных местах, появляется следующая ошибка: «Не удалось создать представление« UserView »как с инжекционным, так и с пустым конструктором».
В то же время, когда я запускаю программу в самой Visual Studio в режиме отладки или программа выпуска работает без ошибок.
В чем может быть проблема ???
Вот методы называют View, они одинаковы, но во втором случае ошибка вылетает:
private Command _showDashboardView;
public Command ShowDashboardView
{
get
{
return _showDashboardView ?? (_showDashboardView = new Command(() =>
{
_pleaseWaitService.Show();
CurrentViewModel = new DashboardViewModel();
_pleaseWaitService.Hide();
}));
}
}
private Command _showUserView;
public Command ShowUserView
{
get
{
return _showUserView ?? (_showUserView = new Command(() =>
{
_pleaseWaitService.Show();
CurrentViewModel = new UserViewModel();
_pleaseWaitService.Hide();
}));
}
}
UserViewModel:
public class UserViewModel : ViewModelBase
{
private readonly IUIVisualizerService _uiVisualizerService;
private readonly IMessageService _messageService;
private readonly IPleaseWaitService _pleaseWaitService;
public olympEntities context
{
get { return GetValue<olympEntities>(contextProperty); }
set { SetValue(contextProperty, value); }
}
public static readonly PropertyData contextProperty = RegisterProperty("context", typeof(olympEntities), null);
public UserViewModel()
{
context = new olympEntities();
Users = new ObservableCollection<User>(context.Users.OrderByDescending(u => u.ID_User));
AddUser = new TaskCommand(OnAddUserExecuteAsync);
EditUser = new TaskCommand(OnEditUserExecuteAsync);
RemoveUser = new TaskCommand(OnRemoveUserExecuteAsync);
AddTicket = new TaskCommand(OnAddTicketExecuteAsync);
EditTicket = new TaskCommand(OnEditTicketExecuteAsync, OnEditTicketCanExecute);
RemoveTicket = new TaskCommand(OnRemoveTicketExecuteAsync, OnEditTicketCanExecute);
var dependencyResolver = this.GetDependencyResolver();
_uiVisualizerService = dependencyResolver.Resolve<IUIVisualizerService>();
_messageService = dependencyResolver.Resolve<IMessageService>();
_pleaseWaitService = dependencyResolver.Resolve<IPleaseWaitService>();
}
public override string Title { get { return "CustomerViewModel"; } }
Если вы добавите аргументы в конструктор UserViewModel, вызов будет выглядеть так: CurrentViewModel = новый UserViewModel (uiVisualizerService, messageService, pleaseWaitService); '?? – SaTuN
Вы должны использовать IViewModelFactory для создания моделей представления. Еще лучше, пусть Catel автоматически разрешит их для вас. Если вы хотите показать окно, используйте это: uiVisualizerService.ShowDialogAsync(); –
Нет, я использую UserControl и вставляет их в главное окно. и uiVisualizerService.ShowDialog Я использую при вызове windows yes. – SaTuN