web-dev-qa-db-ja.com

WinformアプリケーションをWPFアプリケーションに変換する

WinFormsで作成した小さなプログラムがあり、WPFを使用して再度作成したいと考えています。

私はWPFを初めて使用しますが、XAMLでできることは何でも、コードなしでもできるということを読みました。

もちろん、Winformsを使用するときにはXAMLがありません。 winformsアプリケーションに使用したのと同じコードをWPFアプリケーションに使用して、同じ結果を得ることができますか?または、XAMLを作成および編集する必要がありますか? XAMLを使用する場合と使用しない場合の利点は何ですか?

また、Winformsを使用した過去の経験を考慮して、Winformsでは機能したがWPFには適切でない設計および実装についての考え方を何らかの形で変更する必要がありますか?

16
Yonatan Nir

いいえ、WPFでwinformsのコードを再利用することはできません。

できたとしても、すべきではありません。

xAMLでできることは何でも、XAMLなしでもできます。

本当にXAMLを使用してUIを定義してから、 DataBinding および [〜#〜] mvvm [〜#〜] を使用する必要があります。これは、よりプロフェッショナルな開発方法です。従来の手続き型winformsアプローチよりも。

XAMLを使用しないことは、使用するよりもはるかに面倒です。最初は威圧的に見えるかもしれませんが、それは本当に素晴らしいものです。

もちろん、Winformsを使用する場合、XAMLはありません。

いいえ、もちろんありません。 winformsは、何もサポートしていない非常に古いテクノロジーです。それが彼らがVisual Studioデザイナーを作成した理由です。さもないと、何かをするのに膨大な膨大なコードが必要になるため、誰もwinformsを使用しませんでした。

Winformsアプリケーションに使用したのと同じコードをWPFアプリケーションに使用して、同じ結果を得ることができますか?

おそらく、いくつかのクラス名などを変更することで、WPFが提供する主な利点を失うことになります。これは、ひどいwinformsのようなコードを正確に取り除きます。

winformsを使用した過去の経験を考慮して、Winformsでは機能したがWPFには適切ではない設計と実装についての考え方を何らかの形で変更する必要がありますか?

はい。 WPFはMVVMをサポートしているため、従来のwinformsアプローチとはまったく異なる考え方が必要です。

WinformsからWPFへのアップグレードについて Rachel's Excellent Post を読むことを強くお勧めします。

28

WinformsアプリをWPFに直接変換しようとしましたが、フレームワークと常に戦っているので、必要以上の問題が発生します。 MVVMとデータバインディングを読んで、それを使用してください。そのWPFの設計は、テスト容易性などのいくつかの利点があります。実際には、いくつかの単純な概念(データバインディング、ビューモデルなど)でかなり長い道のりを歩き、知識を広げることができますが、最初にMVVMとデータバインディングの理解をお勧めします。

MVVMLightを使用して始めるのに適したフレームワークはMVVMLightですが、フレームワークを使用せずに基本を記述して、物事がどのように機能するかを知る価値があります。

私はこれがリードコプシーからの投稿の良いセットであることを覚えているようです: http://reedcopsey.com/series/windows-forms-to-mvvm/

3
gmn

XAMLを使用せずにWPFコントロールを作成しようとすると問題が発生します。フレームワーク全体がMVVMパターンを中心に構築されるため、Viewを手続き型ではなく宣言型で記述する必要があります。 C#とXAMLで同じUIオブジェクトを確実に作成できますが、C#で作成するには、UIの状態が変化したときに補正するために、フレームワークがどのように動作するかを(非常に詳細に)知る必要があります。反対に、XAMLを実行すると(WPFの指示に従って)、通常は問題なく更新され、無限のバグに対処する必要はありません。短い「はい」ではコードで実行できますが、「いいえ」では正気を失うことなくコードで実行できません。

2
Andrew

実際には、プロジェクトの複雑さに依存します。非常に小さなプロジェクトの場合、この「変換」を非常に簡単に行うことができます。しかし、WPF開発は多くの場合MVVM/Prismに基づいており、多くの利点が得られるため、それは良い習慣ではありません。 UIの動作も異なる場合があります-それはプロジェクトの複雑さに依存します。

1

私は2番目か3番目か4番目の他の答えをします。 「Winformsスタイル」コードを使用してWPFアプリを構築しようとすることは決してありません。初めてのWPFアプリでこれを行いましたが、これは私がこれまでに犯した最大の間違いでした。なんて巨大な混乱だ。 2番目のアプリはMVVMに向かって途中でしたが、それも巨大な混乱でした。 3番目のアプリで、MVVM、DIなどを100%使用して以来、WPFとコードで100%が非常にきれいです。

WinformsコードをWPFに移植することは、実際には意味がありません。 Winformsで作成したコードの大部分は、WPFに移行すると破棄されます。基本的に、唯一のポータブルなものはビジネスロジックです。すべてのUIロジックは完全に異なります。

WPFについてのこれまでの最大の概念の1つはUIとビジネスロジックの分離であるため、後で感謝します。これにより、スワップアウトの制御が簡単になります。

0
SledgeHammer