View и ViewModel являются обычными классами, которые получают экземпляр. Это делается путем вызова конструктора, как в любом другом классе. Итак, как простой ответ на ваш вопрос: задайте точку останова в каждом конструкторе и посмотрите, какой из них попадает первым.
На ваш вопрос нет ответа, потому что это зависит от вашей архитектуры и использования. Часто некоторый элемент управления привязан к свойству ViewModel его родителя, который изменяется в какой-то момент. В этот момент ваш вид уже существует, и вы не знаете, как долго уже установлено значение, для которого было установлено свойство. В других случаях ваш вид создается для определенного ViewModel и принимает его как параметр конструктора.
Единственный способ убедиться, что ViewModel существует перед представлением, чтобы передать ViewModel в качестве параметра конструктора. Идея параметров конструктора заключается в том, чтобы выразить: «Этот класс нуждается в существующих экземплярах типа xy, которые должны быть созданы», о чем вы просите. Однако, как вы установите его как Views DataContext
в конструкторе, и поскольку DataContext
может измениться после создания представления, вы не можете быть уверены, что View не получит новый ViewModel, назначенный после создания. Хуже того, вы больше не сможете использовать свой контроль в XAML, потому что у него больше нет конструктора по умолчанию.
Согласно вашему первому вопросу, не совсем понятно, почему ViewModel должен существовать до просмотра. Если вам нужно прочитать значение ресурса из вашего представления и присвоить его свойству в ViewModel, я бы ожидал, что это будет наоборот? Или вы получаете доступ к представлению в вашей модели ViewModel (не нужно!)?
Вопрос в том, почему вы должны задать этот вопрос в первую очередь. В вашей концепции (или ваших боссов) есть что-то довольно неправильное: View и ViewModel - это две сущности, которые должны действительно работать, не зная друг о друге. Идея состоит в том, чтобы создавать приложения, которые могли бы работать без единого представления, только получая/устанавливая значения в ViewModels и обладая представлениями, которые бы скомпилировали любой режим отлично, без ViewModels, просто без каких-либо проявлений или действий ... Если вы попытаетесь Чтобы взломать этот подход, вам лучше не использовать MVVM.
Я считаю, что ваш вопрос не в конкретном контексте (конкретный дизайн приложения), даже после изучения вашего предыдущего вопроса я сомневаюсь в том, о чем вы спрашиваете, - можно полностью заменить XAML кодом и наоборот. Если вы выполняете что-то в XAML, то вы не делаете этого в codebehind и наоборот. Во всяком случае, интересно посмотреть, как этот вопрос в конечном итоге будет отвечать –
Привет, ГеннадийВанинНовосибирск Вы видели связанную тему по моему вопросу выше? Я получаю доступ к модели представления, чтобы добавить элемент в свой существующий список, используя код позади. Но я хочу, чтобы это произошло, прежде чем выполнять что-либо в моей модели просмотра. Дополнительную информацию см. Ниже по ссылке: http://stackoverflow.com/questions/16007054/accessing-variables-from-xaml-and-object-from-viewmodel-using-code-behind/16009306?noredirect = 1 # comment22915673_16009306 – JennyJane
Этот вопрос на самом деле не имеет большого смысла. После того, как компилятор будет создан с источником, вы получите класс SINGLE. Код генерируется XAML, и поэтому классы .xaml.cs обычно имеют «частичный класс» в своем определении.Вы можете ссылаться на то, когда привязки на XAML инициализируются, что, конечно же, во время 'InitializeComponent();' – Aron