TOC

This article is currently in the process of being translated into Thai (~98% done).

About WPF:

WPF vs. WinForms

ในบทที่ผ่านมาเราได้กล่าวถึง WPF คืออะไรและได้กล่าวเกี่ยวกับ WinForms บ้างเล็กน้อย ในบทนี้ผมจะพยายามเปรียบเทียบทั้งสอง framework เพราะแม้ว่าทั้งสองจะทำหน้าที่เดียวกันแต่มีความแตกต่างกันมาก ถ้าคุณยังไม่เคยทำงานกับ WinForms มาก่อน และ WPF เป็น GUI framework แรกของคุณ คุณอาจจะข้ามบทนี้ไปได้เลย แต่คุณสามารถอ่านต่อไปได้ถ้าคุณสนใจที่จะรู้ถึงความแตกต่าง

ข้อแตกต่างที่สำคัญที่สุดของ WinForms และ WPF คือ ในขณะที่ WinForms เป็นเพียง layer ที่อยู่บน standard Windows controls (เช่น TextBox) แต่ WPF ถูกสร้างขึ้นมาจากไม่มีอะไรเลยและไม่ต้องอาศัย standard Windows controls ในเกือบทุกสถานการณ์ นี่อาจจะดูเหมือนเป็นความแตกต่างที่เล็กน้อย แต่มันไม่ใช่เลย ซึ่งคุณจะสามารถสังเกตุได้แน่ๆ หากคุยเคยทำงานกับ framework ที่ขึ้นอยู่กับ Win32/WinAPI

ยกตัวอย่างเช่น ปุ่มที่มีรูปภาพและข้อความอยู่บนปุ่ม ซึ่งไม่ใช่ standard Windows controls ดังนั้น WinForms จึงไม่สามารถใช้ GUI framework ที่มีอยู่ได้ แต่คุณจะต้องวาดภาพด้วยตัวเอง เอาไปใช้กับปุ่มที่คุณสร้างเองที่สนับสนุนให้มีรูปภาพ หรือใช้ control ที่มาจาก 3rd party แต่สำหรับ WPF button จะมีอะไรก็ได้เพราะมันมีขอบ (border) ที่ประกอบไปด้วย content และสถานะ (state) ต่างๆ (เช่น untouched, hovered, pressed). WPF button จึง "look-less" เช่นเดียวกับ controls ส่วนใหญ่ของ WPF ซึ่งหมายความว่า มันสามารถประกอบไปด้วย controls อื่นๆ อยู่ภายใน หากคุณต้องการปุ่มที่มีรูปภาพและข้อความล่ะ คุณก็แค่เอา Image และ TextBox control ใส่เข้าไปใน button control เท่านั้น คุณจะไม่สามารถทำงานอย่างยืดหยุ่นแบบนี้ได้กับ standard WinForms controls ซึ่งมันทำให้มีตลาดใหญ่สำหรับการใช้งานของ controls ง่ายๆ เช่นปุ่มที่มีภาพและอื่นๆ

ข้อเสียเปรียบสำหรับความยืดหยุ่นนี้คือ บางครั้งคุณจะต้องทำงานหนักขึ้นเพื่อบรรลุถึงบางสิ่งที่ทำได้ง่ายๆ ด้วย WinForms เพราะมันสร้างขึ้นสำหรับสถานการณ์ที่คุณต้องการมันเท่านั้น อย่างน้อยก็เป็นความรู้สึกในตอนเริ่มแรกที่คุณพบว่าต้องสร้าง templates สำหรับการทำ ListView อันนึงพร้อมกับรูปภาพและข้อความอยู่ข้างๆ ซึ่งเป็นสิ่งที่ WinForms ListViewItem สามารถทำได้ผ่านโค้ดแค่บรรทัดเดียวเท่านั้น

นี่เป็นความแตกต่างเพียงอย่างเดียว แต่เมื่อคุณได้ทำงานกับ WPF คุณจะรู้ว่าจริงๆ แล้วมันเป็นสิ่งที่เป็นเหตุผลพื้นฐานสำหรับความแตกต่างอื่นๆ WPF เป็นเพียงการทำสิ่งต่างๆ ในแบบฉบับของตัวเองเพื่อให้ดีขึ้นหรืออาจจะแย่ลงก็ได้ คุณจะไม่ได้ถูกจำกัดที่จะต้องทำเฉพาะในแบบของ Windows อีกต่อไป แต่เพื่อให้ได้รับความยืดหยุ่นเช่นนี้ คุณจะต้องทำงานหนักขึ้นอีกหน่อยเมื่อคุณต้องการจริงๆ ที่จะทำบางอย่างในแบบของ Windows

ต่อไปนี้เป็นรายการทั้งหมดของข้อดีหลักๆ ที่สำคัญของ WPF และ WinForms ซึ่งจะช่วยให้คุณรู้จักมันได้ดีขึ้น

ข้อดีของ WPF

  • เป็น framework ที่ใหม่กว่าและสอดคล้องกับมาตรฐานในปัจจุบันมากกว่า
  • Microsoft กำลังใช้งาน WPF สำหรับแอพพลิเคชั่นใหม่ๆ มากมาย เช่น Visual Studio
  • WPF มีความยืดหยุ่นมากกว่าจึงทำให้คุณสามารถทำสิ่งต่างๆ ได้มากขึ้นโดยไม่ต้องเขียนหรือซื้อ controls ใหม่
  • เมื่อคุณจำเป็นต้องซื้อ 3rd party controls นักพัฒนา controls เหล่านั้นอาจจะเน้น WPF มากกว่าเพราะเป็นเทคโนโลยีที่ใหม่กว่า
  • XAML ทำให้ง่ายต่อการสร้างและแก้ไข GUI ของคุณ และทำให้สามารถแบ่งงานระหว่างนักออกแบบ (XAML) และโปรแกรมเมอร์ (C#, VB.NET เป็นต้น)
  • การผูกข้อมูล (Databinding) ทำให้คุณสามารถได้ข้อมูลและแผนผัง (layout) ที่แยกจากกันได้ชัดเจนขึ้น
  • ใช้การเร่งฮาร์ดแวร์สำหรับการวาด GUI เพื่อประสิทธิภาพที่ดีขึ้น
  • WPF ช่วยให้คุณสามารถสร้าง user interface ที่ใช้ได้สำหรับทั้งโปรแกรมบน windows และ web (Silverlight/XBAP)

ข้อดีของ WinForms

  • เป็น framework ที่เก่ากว่าจึงมีการทดลองใช้และถูกทดสอบมากกว่า
  • มี 3rd party controls มากมายที่คุณสามารถซื้อหรือหามาได้ฟรีๆ
  • การออกแบบใน Visual Studio สำหรับ WinForms ยังคงดีกว่า WPF ในขณะที่เขียนบทความนี้ ซึ่งคุณจะต้องทำงานมากขึ้นด้วยตัวคุณเองเมื่อทำงานกับ WPF