2015-01-30 4 views
0

Здесь идет еще один.Конструктор недействителен, поскольку параметр не может быть разрешен.

У меня есть два ViewModels: MainViewModel и ConnectionViewModel И два вида: MainWindow и ConnectionView

автоматическое связывание работ Уандер и каждый вид модели переходит к его мнению. Проблема заключается в том, что ConnectionViewModel принимает параметр модели Connection в своем конструкторе. Поэтому, когда пришло время для того, чтобы быть инстанциирован, я получаю это сообщение в окне вывода (благодаря регистратору):

Конструктор не является допустимым, поскольку параметр «соединение» не может быть решен с разрешения имен зависимостей

public ConnectionViewModel(Connection connection, IMessageService messageService, IAnotherService anotherService) 

Следовательно, получение нулевого Connection внутри ConnectionViewModel.

Возможно, я пропустил (несколько) шагов. Разве модель не должна создаваться с помощью viewmodel? Должен ли я заранее инициировать его, и если да, то где? Или мне нужно сначала зарегистрировать его?

+0

и что о кодах? –

+0

Постарайтесь сделать Соединение в качестве публичного имущества и сделать аффектацию сразу после instanciation. – NTinkicht

+0

Я не вижу, какой код нужен здесь. – Kilazur

ответ

0

Хорошо, я понимаю, что я пропустил.

Использование вложенных UserControls изначально относится к спискам; с этой точки зрения, для вашего родителя ViewModel имеет смысл содержать свойство коллекции модели.

Поскольку у меня был только один Connection, а не список, и хотел, чтобы отделить все чисто, я не думаю о вводе Connection в моей MainViewModel, но вам все равно придется связать собственности как DataContext UserControl в XAML.

У меня было <views:ConnectionView /> в моем MainWindow.xaml, и практически ничего в MainViewModel.

Что мне было нужно, чтобы иметь Connection недвижимость в MainViewModel:

public class MainViewModel : ViewModelBase 
{ 
    public MainViewModel(IMessageService) 
    { 
     Connection = new Connection(); 
    } 

    public Connection Connection 
    { 
     get { return GetValue<Connection>(ConnectionProperty); } 
     set { SetValue(ConnectionProperty, value); } 
    } 
    public static readonly PropertyData ConnectionProperty = RegisterProperty("Connection", typeof(Connection)); 
    /*...*/ 
} 

и привязки в XAML:

<views:ConnectionView DataContext="{Binding Connection}"/>

Смежные вопросы