WPF là một trò chơi thay đổi đối với tôi. Ứng dụng hàng đầu của công ty tôi là một chương trình WinForms có giao diện người dùng đang xây dựng động tại thời gian chạy từ siêu dữ liệu. Đó là khoảng sáu tháng nỗ lực, tất cả đã nói, để có được giao diện người dùng ngay cả ổn định, hãy để một mình hấp dẫn. Vẫn còn một số lỗi mà tôi không thể khắc phục được, phần lớn là vì mã UI là vô vọng và không thể tránh khỏi gắn liền với mã mô hình dữ liệu.Và đừng khiến tôi bắt đầu với tay cầm cửa sổ.
Bây giờ hệ thống đã được sản xuất trong một năm hoặc lâu hơn, khách hàng đến với tôi với các yêu cầu như "Chúng tôi muốn có thể sắp xếp lại thông tin trên màn hình này bằng cách kéo và thả" và "Có thể chúng tôi có được thông tin này để hiển thị trong lưới trên phần này của tab này không? " và - yêu thích của tôi - "Chúng tôi có thể kiểm tra chính tả và tự động nhắn tin không?" Những yêu cầu đi vào một backlog đó là nhận được khá damn dài.
Tôi mất một lượng thời gian hợp lý để tìm ra cách cấu trúc lại thiết kế của ứng dụng sao cho nó có thể hỗ trợ giao diện người dùng WPF. Tôi đã vật lộn với điều này và trong một năm rưỡi, và tôi chỉ bắt đầu nhận được lực kéo vào nó một khi tôi đã thoát ra khỏi các cuốn sách WPF tôi đã làm việc từ và học MVVM .) Một khi tôi đã làm, kết quả là ngoạn mục.
Mã đơn giản hơn rất nhiều. Có ít logic hơn để gỡ lỗi. Mọi thứ trong giao diện người dùng là nhiều hơn nhanh hơn, điều quan trọng vì toàn bộ lý do đây là ứng dụng dành cho máy tính để bàn ngay từ đầu là chúng tôi cần một giao diện người dùng rất nhạy. Chương trình của tôi có thể tạo hàng nghìn điều khiển giao diện người dùng mà không phải lo lắng về việc xử lý cửa sổ. Sự dễ dàng mà tôi có thể thay đổi giao diện của chương trình là hàm rơi.
(Ví dụ: Giao diện người dùng trình bày DataRow
s với nhiều mẫu khác nhau. Vì một màn hình nhất định có thể có hàng chục hàng và con trỏ nhỏ, rất hữu ích để người dùng có thể biết, trong nháy mắt, những gì hàng con trỏ được in Nó đã cho tôi mười phút để thực hiện các phong cách mà bây giờ làm cho khả năng hình ảnh này có sẵn ở khắp mọi nơi trong ứng dụng của tôi. thêm nó vào ứng dụng WinForms của tôi. Cấp, nó sẽ mất nhiều thời gian hơn nếu nó không thể được thực hiện bằng cách thêm hai phong cách. WPF là nghiêm túc không phải là ma thuật.)
Có nhược điểm không? Như cô Palin thích nói, bạn betcha. Duyệt qua một số câu hỏi tôi đã hỏi trên SO - câu hỏi về how a no-op value converter changed the behavior of data binding là một câu hỏi hay. Toàn bộ cách tiếp cận chà xát-bụng-trong-khi-đầu-đầu-đầu-bạn của bạn để gỡ lỗi ràng buộc là khá bực bội, đặc biệt là vì nó rất dễ dàng để có lỗi ràng buộc và thậm chí không biết nó. (Bây giờ tôi vẫn giữ cửa sổ Output trên màn hình mọi lúc để nếu có bất kỳ lỗi ràng buộc nào trong khi tôi đang thử nghiệm, chuyển động của các thông điệp được ghi lại sẽ bắt được mắt của tôi.) Sẽ rất tuyệt khi có thể nhận được một dấu vết ngăn xếp thực sự khi cửa sổ của bạn ném một số XamlParseException
. Đừng bắt đầu nói chuyện, tôi có thể nói chuyện suốt đêm.
Và các công cụ! Các công cụ trực quan của Visual Studio để xây dựng giao diện người dùng WPF hoàn toàn vô dụng đối với tôi. Tôi có Blend, và đã sử dụng nó để tái định dạng một điều khiển, nhưng nói chung tôi tìm thấy bằng cách sử dụng Blend để giống như cố gắng để chạy bộ thông qua một đầm lầy đầy hubcaps và baling dây. Tôi chắc chắn rằng nó thực sự tuyệt vời nếu tất cả các bạn biết là Blend, nhưng nếu những gì bạn học đầu tiên là mô hình đối tượng WPF và XAML, hành vi của Blend là khá bí ẩn. Các trình soạn thảo XML trong Visual Studio và Kaxaml cho tôi một chức năng đáng buồn, và chức năng WPF của Resharper là, chúng ta hãy nói, một công việc đang tiến hành. Tôi rất thích sử dụng các công cụ cho WinForms giúp tôi có thể thuận lợi và nhanh chóng xây dựng tổ quạ mã nguồn chậm, kỳ quặc, và không thể duy trì được mà tôi sắp sửa không ưa thích.
"Tôi cũng hơi lo ngại rằng WPF sẽ thịnh hành trong vài năm nữa và sau đó Microsoft sẽ cảm thấy mệt mỏi vì điều đó". Sau đó, một lần nữa, Microsoft đã "mệt mỏi" của Windows Forms. – itowlson
@itowlson - không sao cả. Tôi thực sự thích SO nhưng một số người ở đây cần phải có một cuộc sống. Tại sao mọi người ở đây lại quá nhanh để đóng câu hỏi? Bạn có được điểm khi bạn bỏ phiếu để đóng một câu hỏi không? Tôi không hiểu. –