Преобразование приложения Winform в приложение WPF

У меня есть небольшая программа, которую я сделал с WinForms, и теперь я хочу сделать это снова, используя WPF.

Я новичок в WPF и прочитал, что все, что вы можете сделать с XAML, вы также можете обойтись без него, то есть, используя только код.

Конечно, у вас нет XAML при использовании Winforms. Могу ли я использовать тот же код для приложения WPF, который я использовал для приложения winforms, и получить тот же результат? Или мне нужно создавать и редактировать XAML? Каковы преимущества использования или не использования XAML?

Кроме того, учитывая прошлый опыт использования Winforms, должен ли я как-то изменить то, как я думаю о дизайне и реализации, которые работали для Winforms, но не подходят ли они для WPF?

Ответ 1

Нет, вы не можете повторно использовать код из winforms в WPF.

и даже если бы вы могли, вы не должны.

что вы можете сделать с XAML, вы также можете обойтись без него

Вы должны действительно использовать XAML для определения пользовательского интерфейса, а затем использовать DataBinding и MVVM, который является гораздо более профессиональным способом развития, чем традиционный процедурный подход winforms.

Не использовать XAML гораздо труднее, чем использовать его. Сначала это может выглядеть пугающе, но это действительно потрясающая вещь для работы.

Конечно, у вас нет XAML при использовании Winforms

Нет, конечно нет. winforms - действительно старая технология, которая ничего не поддерживает. Вот почему они создали конструктор Visual Studio, иначе никто бы никогда не использовал winforms для чего-либо из-за ужасающего гигантского бегемотного количества кода, необходимого для использования чего-либо полезного.

Можно ли использовать тот же код для приложения WPF, который я использовал для приложения winforms, и получить тот же результат?

Возможно, адаптируя некоторые имена классов и еще много чего, но тогда вы теряете главное преимущество, предоставляемое WPF, которое точно избавляется от ужасного кода, подобного winforms.

учитывая прошлый опыт использования Winforms, должен ли я каким-то образом изменить способ, который я думаю о дизайне и реализации, который работал для Winforms, но не подходит для WPF?

Да. WPF поддерживает MVVM, и для этого требуется совершенно другой менталитет из традиционного подхода winforms.

Я настоятельно рекомендую прочитать Rachel Excellent Post об обновлении от winforms до WPF.

Ответ 2

Я попытался преобразовать приложение Winforms в WPF напрямую, и это вызывает больше проблем, чем вам нужно, потому что вы постоянно работаете с фреймворком. Читайте на MVVM и привязывайте данные и используйте это. Его WPF разработан вокруг и имеет ряд преимуществ, таких как тестируемость. Вы действительно можете пройти довольно долгий путь с помощью нескольких простых понятий (привязки данных, режимов просмотра и т.д.) И расширить свои знания по мере продвижения, но я бы порекомендовал сначала понимание MVVM и привязки данных в WPF.

Хорошей основой для начала будет MVVMLight, но стоит написать основы без рамки, чтобы узнать, как все работает в первую очередь.

Кажется, я помню, что это хороший набор сообщений из тростникового копья: http://reedcopsey.com/series/windows-forms-to-mvvm/

Ответ 3

Пытаясь создать элементы управления WPF без XAML, возникает проблема - вся структура построена вокруг шаблона MVVM, который требует, чтобы ваш вид был описан декларативно, а не процедурный. Хотя вы можете определенно создавать те же объекты пользовательского интерфейса в С# и XAML, для этого в С# вам потребуется знать (по-настоящему мучительно подробно), как работает система, чтобы компенсировать изменения состояния вашего пользовательского интерфейса. С другой стороны, если вы это сделаете, то XAML (как диктует WPF, вы должны), тогда вещи обычно обновляются просто отлично и без необходимости работать с бесконечными ошибками. Короче говоря, "да" вы можете сделать это в коде, но "нет" вы не можете сделать это в коде, не теряя рассудок.

Ответ 4

На самом деле это зависит от того, насколько сложным является ваш проект. Для довольно небольшого проекта вы можете сделать это "преобразование" довольно просто. Но это не очень хорошая практика, даже потому, что разработка WPF часто основана на MVVM/Prism, и они дают вам много преимуществ. Также поведение вашего пользовательского интерфейса может отличаться - это зависит от сложности вашего проекта.

Ответ 5

Я отвечу 2 или 3 или 4 другим. Никогда, никогда, никогда, никогда не пытайтесь создать WPF-приложение с кодом "Winforms style". Я сделал это в своем первом WPF-приложении, и это была самая большая ошибка, которую я когда-либо делал. Какой гигантский беспорядок. Второе приложение я пошел навстречу MVVM, и это тоже было гигантским беспорядком. 3-е приложение и с тех пор, как я перешел на 100% MVVM, DI и т.д. И 100% по книге WPF и код супер чист.

На самом деле нет смысла переносить код Winforms в WPF любым способом. Большая часть кода, который вы написали в Winforms, выкидывается при переходе WPF. В основном единственная портативная продукция - это бизнес-логика. Все логики пользовательского интерфейса совершенно разные.

И вы поблагодарите нас позже, потому что одна из величайших концепций WPF - это разделение пользовательского интерфейса и бизнес-логики. Это делает заменой контроль куска пирога.