ฉันพยายามที่จะเรียนรู้ WPF และปัญหา MVVM แต่มีอุปสรรค คำถามนี้คล้ายกัน แต่ไม่เหมือนกันกับคำถามนี้ (การจัดการไดอะล็อก -in-wpf-with-mvvm) ...
ฉันมีแบบฟอร์ม "เข้าสู่ระบบ" ที่เขียนโดยใช้รูปแบบ MVVM
แบบฟอร์มนี้มี ViewModel ซึ่งเก็บชื่อผู้ใช้และรหัสผ่านซึ่งถูกผูกไว้กับมุมมองใน XAML โดยใช้การเชื่อมโยงข้อมูลปกติ นอกจากนี้ยังมีคำสั่ง "เข้าสู่ระบบ" ซึ่งถูกผูกไว้กับปุ่ม "เข้าสู่ระบบ" บนแบบฟอร์ม agan ใช้ databinding ปกติ
เมื่อคำสั่ง "ลงชื่อเข้าใช้" เริ่มทำงานจะเรียกใช้ฟังก์ชันใน ViewModel ซึ่งจะดับและส่งข้อมูลผ่านเครือข่ายเพื่อเข้าสู่ระบบเมื่อฟังก์ชันนี้เสร็จสมบูรณ์มีการดำเนินการ 2 รายการ:
การเข้าสู่ระบบไม่ถูกต้อง - เราเพิ่งแสดงกล่องข้อความและทุกอย่างเรียบร้อย
การเข้าสู่ระบบนั้นถูกต้องเราต้องปิดแบบฟอร์มการเข้าสู่ระบบและให้มันกลับมาจริงเพราะ
DialogResult
...
ปัญหาคือ ViewModel ไม่รู้อะไรเกี่ยวกับมุมมองจริงดังนั้นจะปิดมุมมองอย่างไรและบอกให้ส่งคืน DialogResult ที่เฉพาะเจาะจงได้อย่างไร ฉันสามารถติดโค้ดบางอย่างใน CodeBehind และ / หรือส่งมุมมองผ่านไปยัง ViewModel ได้ แต่ดูเหมือนว่ามันจะเอาชนะ MVVM ได้ทั้งหมด ...
ปรับปรุง
ในท้ายที่สุดฉันเพิ่งละเมิด "ความบริสุทธิ์" ของรูปแบบ MVVM และให้มุมมองเผยแพร่Closed
กิจกรรมและเปิดเผยClose
วิธีการ ViewModel view.Close
ก็จะเพียงโทร มุมมองเป็นที่รู้จักผ่านทางอินเตอร์เฟสและต่อสายผ่านคอนเทนเนอร์ IOC เท่านั้นดังนั้นจึงไม่มีการทดสอบหรือการบำรุงรักษาที่หายไป
ดูเหมือนว่าค่อนข้างโง่ที่คำตอบที่ยอมรับคือ -5 คะแนน! ในขณะที่ฉันตระหนักดีถึงความรู้สึกที่ดีที่เราได้รับจากการแก้ปัญหาในขณะที่ "บริสุทธิ์" แน่นอนฉันไม่ใช่คนเดียวที่คิดว่าเหตุการณ์ 200 บรรทัดคำสั่งและพฤติกรรมเพียงเพื่อหลีกเลี่ยงวิธีการหนึ่งบรรทัดใน ชื่อของ "pattern" และ "purity" นั้นค่อนข้างไร้สาระ ....
Close
วิธีการง่าย ๆยังคงเป็นวิธีที่ดีที่สุด ทุกสิ่งทุกอย่างในกล่องโต้ตอบที่ซับซ้อนกว่านี้คือ MVVM และ databound แต่ดูเหมือนว่าโง่ที่จะใช้ "การแก้ปัญหา" ขนาดใหญ่ที่นี่แทนที่จะเป็นวิธีการง่ายๆ ...