Почему мое представление WPF не работает без кода при применении через DataTemplate? - PullRequest
1 голос
/ 02 ноября 2010

Я работаю над большим проектом WPF с использованием MVVM.В настоящее время мы все еще решаем, в какой степени мы будем использовать выделенный код, но до сих пор мы прекрасно ладили с ничем (за исключением InitializeComponent для окон).Однако недавно я начал использовать типизированные DataTemplates для применения представлений к моим моделям представлений, и кажется, что эти представления, например окна, не работают без вызова InitializeComponent, когда, согласно статье этой , я думал, что,DataTemplate просто объявляет представление.Когда я удаляю файл с выделенным кодом представления, модель представления становится полностью пустой.Когда я оставляю это, все нормально.Есть идеи, почему я могу видеть это поведение?

Ответы [ 2 ]

1 голос
/ 02 ноября 2010

Во-первых, вы можете упускать из виду что-то важное: я активно использовал эту статью, когда изучал MVVM / WPF, и никогда не думал, что она предлагает исключить вызовы InitializeComponent из View.cs.

Фактически, при быстром поиске выявляется следующее (в разделе «Релейная командная логика») [выделение мое]:

В каждом представлении приложения есть пустой файл за кодом, за исключением стандартный шаблонный код, который вызывает InitializeComponent в классе Конструктор.

Я применял тот же шаблон, который вы описали, оставляя код по умолчанию для каждого вида на месте, и пока он плавный. :)

Далее: Если вы проверите определение для значения по умолчанию InitializeComponent(), вы увидите, что сгенерированный код содержит следующую инструкцию:

System.Windows.Application.LoadComponent(this, resourceLocater);

Я не проверял, чтобы убедиться, что это так, но я поставлю золотую скрипку на твою душу, так как предотвращение выполнения этой линии повлияет на отображение твоего взгляда ...;)

0 голосов
/ 03 ноября 2010

По словам Джакобсона, даже решение Джоша Смита, на которое я ссылался в своем вопросе, не может отобразить его взгляды без кода, поэтому строка, в которой говорится, что это можно сделать, вводит в заблуждение. Кажется, единственный способ избежать выделения кода для ваших представлений - это вообще не помещать их в UserControls, а просто хранить XAML непосредственно в теге .

...