คอมโบบ็อกซ์ DataContextProxy silverlight - มีวิธีที่ดีกว่านี้หรือไม่

ฉันใช้คลาส datacontextproxy ที่กำหนดโดย Dan Wahlin เพื่อแก้ไขสิ่งที่ดูเหมือนยากมากเป็นเวลาหลายชั่วโมงก่อนที่จะนำไปสู่การค้นพบครั้งนั้น

ฉันมีคอมโบบ็อกซ์ที่ผูกไว้กับ ObservableCollection<Accounts> Combobox ยังมีค่า: DisplayMemberPath=AccountNumber และ SelectedValue={Binding SelectedAccount} จากนั้นฉันมี DataForm ที่มีคุณสมบัติ CurrentItem ซึ่งเชื่อมโยงกับ SelectedAccount ด้วย ภายใน DataForm ของฉัน ฉันมีฟิลด์จำนวนหนึ่งที่ต้องมีดรอปดาวน์เพิ่มเติม (AcctCode, UseCode ฯลฯ) เพื่อบรรเทาปัญหาการเชื่อมโยงที่ฉันพบภายใน DataForm ฉันจึงใช้ datacontextproxy ซึ่งช่วยให้ฉันตั้งค่า ItemsSource ของ cbobox ของฉันเป็น {Binding Source={StaticResource DataContextProxy}, Path=DataSource.AccountCodes}" สิ่งนี้ใช้งานได้ดีในแง่ของผลลัพธ์สุดท้าย

ก่อนที่จะสะดุดกับสิ่งนี้ ฉันต้องดิ้นรนกับการค้นหานี้จริงๆ ฉันไม่ได้ใช้บริบทโดเมน ดังนั้นฉันจึงใช้ Kyle Mcllelans ComboBoxex ไม่ได้ และไม่สามารถใช้โซลูชันส่วนใหญ่ที่นำเสนอได้ ฉันพยายามสร้างอินสแตนซ์ของ ViewModel ของฉันเป็นทรัพยากรภายในเครื่องใน View ของฉัน แต่ ก) ฉันรู้สึกสกปรกในแง่ของ MVVM และ b) ไม่สามารถสร้างอินสแตนซ์ VM ใหม่ได้ เนื่องจาก VM ของฉันต้องการการอ้างอิงบริการจำนวนมาก ที่จะส่งต่อในการก่อสร้าง

ไม่ว่าในกรณีใด ฉันแค่สงสัยว่ามีวิธีใดที่ฉันควรทำสิ่งนี้ซึ่งมีประสิทธิภาพมากกว่า MVVM มากกว่า บำรุงรักษาได้ดีกว่า ดีที่สุดมากกว่า ฯลฯ

ขอบคุณ,

สกอตต์


person Scott Silvi    schedule 25.02.2011    source แหล่งที่มา


คำตอบ (1)


Scott ฉันได้ตัดสินใจใช้ DataContextProxy แล้ว ฉันคิดว่าการใช้มันยังคงเป็นโซลูชัน MVVM ที่ดีโดยที่มุมมองมีความรู้เกี่ยวกับ VM ผ่านการโยงหรือสั่งการเท่านั้น

ฉันเห็นว่าการใช้มันเป็นวิธีแก้ปัญหาชั่วคราวจนกว่า Silverlight 5 จะจัดส่ง ใน Silverlight 5 การเชื่อมโยงบรรพบุรุษถูกนำมาใช้ซึ่งจะให้ความยืดหยุ่นมากขึ้นในการผูกข้อมูล

person Rus    schedule 26.02.2011
comment
ฉันชอบคุณมากสำหรับข้อมูล SL5 ฉันไม่มีเวลาดูมัน แต่ฉันตื่นเต้นมาก :-D - person Scott Silvi; 27.02.2011