it-swarm.com.ru

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

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

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

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

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

13
Yonatan Nir

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

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

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

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

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

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

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

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

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

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

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

Я настоятельно рекомендую прочитать Отличный пост Рэйчел о переходе с winforms на WPF.

25
Federico Berasategui

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

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

Кажется, я помню, что это был хороший набор сообщений от Рид Копси: http://reedcopsey.com/series/windows-forms-to-mvvm/

2
gmn

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

1
Rinat Galyautdinov

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

1
Andrew

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

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

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

0
SledgeHammer