2013-04-18 1 views
-1

Основываясь на моем предыдущем вопросе Accessing variables from XAML and object from ViewModel using Code Behind: Как я узнаю, что выполняется первым?Который выполняет первый код позади или для просмотра модели

Это код или ViewModel?
Я просто хочу, чтобы мой код заработал до ViewModel

+0

Я считаю, что ваш вопрос не в конкретном контексте (конкретный дизайн приложения), даже после изучения вашего предыдущего вопроса я сомневаюсь в том, о чем вы спрашиваете, - можно полностью заменить XAML кодом и наоборот. Если вы выполняете что-то в XAML, то вы не делаете этого в codebehind и наоборот. Во всяком случае, интересно посмотреть, как этот вопрос в конечном итоге будет отвечать –

+0

Привет, ГеннадийВанинНовосибирск Вы видели связанную тему по моему вопросу выше? Я получаю доступ к модели представления, чтобы добавить элемент в свой существующий список, используя код позади. Но я хочу, чтобы это произошло, прежде чем выполнять что-либо в моей модели просмотра. Дополнительную информацию см. Ниже по ссылке: http://stackoverflow.com/questions/16007054/accessing-variables-from-xaml-and-object-from-viewmodel-using-code-behind/16009306?noredirect = 1 # comment22915673_16009306 – JennyJane

+2

Этот вопрос на самом деле не имеет большого смысла. После того, как компилятор будет создан с источником, вы получите класс SINGLE. Код генерируется XAML, и поэтому классы .xaml.cs обычно имеют «частичный класс» в своем определении.Вы можете ссылаться на то, когда привязки на XAML инициализируются, что, конечно же, во время 'InitializeComponent();' – Aron

ответ

4

View и ViewModel являются обычными классами, которые получают экземпляр. Это делается путем вызова конструктора, как в любом другом классе. Итак, как простой ответ на ваш вопрос: задайте точку останова в каждом конструкторе и посмотрите, какой из них попадает первым.

На ваш вопрос нет ответа, потому что это зависит от вашей архитектуры и использования. Часто некоторый элемент управления привязан к свойству ViewModel его родителя, который изменяется в какой-то момент. В этот момент ваш вид уже существует, и вы не знаете, как долго уже установлено значение, для которого было установлено свойство. В других случаях ваш вид создается для определенного ViewModel и принимает его как параметр конструктора.

Единственный способ убедиться, что ViewModel существует перед представлением, чтобы передать ViewModel в качестве параметра конструктора. Идея параметров конструктора заключается в том, чтобы выразить: «Этот класс нуждается в существующих экземплярах типа xy, которые должны быть созданы», о чем вы просите. Однако, как вы установите его как Views DataContext в конструкторе, и поскольку DataContext может измениться после создания представления, вы не можете быть уверены, что View не получит новый ViewModel, назначенный после создания. Хуже того, вы больше не сможете использовать свой контроль в XAML, потому что у него больше нет конструктора по умолчанию.

Согласно вашему первому вопросу, не совсем понятно, почему ViewModel должен существовать до просмотра. Если вам нужно прочитать значение ресурса из вашего представления и присвоить его свойству в ViewModel, я бы ожидал, что это будет наоборот? Или вы получаете доступ к представлению в вашей модели ViewModel (не нужно!)?

Вопрос в том, почему вы должны задать этот вопрос в первую очередь. В вашей концепции (или ваших боссов) есть что-то довольно неправильное: View и ViewModel - это две сущности, которые должны действительно работать, не зная друг о друге. Идея состоит в том, чтобы создавать приложения, которые могли бы работать без единого представления, только получая/устанавливая значения в ViewModels и обладая представлениями, которые бы скомпилировали любой режим отлично, без ViewModels, просто без каких-либо проявлений или действий ... Если вы попытаетесь Чтобы взломать этот подход, вам лучше не использовать MVVM.

+0

Да, извиняюсь за вопрос. Может быть, они (мои боссы) думали, что, потому что я просто новичок, чтобы они могли попросить меня сделать что-нибудь, даже не подходящее. Мой босс сказал мне, что всегда есть исключение. Но в любом случае, спасибо за объяснение. Я понял. Я действительно начинаю изучать программирование, поэтому у меня очень ограниченное знание. Но еще раз спасибо. – JennyJane

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

  • Нет связанных вопросов^_^