ฉันไม่เข้าใจโหมดการผูกข้อมูลต่างๆใน WPF เช่น:
- ทางเดียว
- สองทาง
- ครั้งหนึ่ง
- ฯลฯ ...
แต่ละโหมดเหล่านี้หมายถึงอะไร?
ควรใช้เมื่อใด
ฉันไม่เข้าใจโหมดการผูกข้อมูลต่างๆใน WPF เช่น:
แต่ละโหมดเหล่านี้หมายถึงอะไร?
ควรใช้เมื่อใด
คำตอบ:
OneWay: ใช้สิ่งนี้เมื่อคุณต้องการให้คุณสมบัติที่ถูกผูกไว้เพื่ออัพเดตอินเทอร์เฟซผู้ใช้TwoWay: มีพฤติกรรมเดียวกันOneWayและOneWayToSourceรวมกัน คุณสมบัติที่ถูกผูกไว้จะอัพเดตอินเทอร์เฟซผู้ใช้และการเปลี่ยนแปลงในอินเทอร์เฟซผู้ใช้จะอัปเดตคุณสมบัติที่ถูกผูกไว้ (คุณจะใช้สิ่งนี้กับ a TextBoxหรือCheckboxตัวอย่าง)OneTime: สิ่งนี้มีลักษณะการทำงานเหมือนกับOneWayยกเว้นว่าจะอัปเดตอินเทอร์เฟซผู้ใช้เพียงครั้งเดียว นี่ควรเป็นตัวเลือกเริ่มต้นของคุณสำหรับการผูก (ด้วยเหตุผลหลายประการฉันจะไม่อธิบายรายละเอียดในที่นี้) คุณควรใช้การผูกประเภทอื่นก็ต่อเมื่อคุณต้องการฟังก์ชันพิเศษเท่านั้นOneWayToSource: นี่คือสิ่งที่ตรงกันข้ามกับOneWay- การเปลี่ยนแปลงค่าอินเทอร์เฟซผู้ใช้อัพเดตคุณสมบัติที่ถูกผูกไว้หากคุณไม่ระบุอะไรเลยพฤติกรรมจะขึ้นอยู่กับการควบคุมที่คุณใช้
สำหรับข้อมูลเพิ่มเติมโปรดดูที่BindingModeenum ใน MSDN
การผูกประกอบด้วยสองเอนทิตี:
เป้าหมายจะต้องเป็นDependencyObject(สำหรับการรวมเข้ากับการทำงาน) และซอร์สอาจเป็นได้DependencyObjectหรือควรมีกลไกบางอย่างในการเลียนแบบระบบ WPF Binding เกี่ยวกับการเปลี่ยนแปลง ( INotifyPropetyChnagedอินเทอร์เฟซImplemeting )
MVVM แนะนำให้โปรเจ็กต์ ViewModel เป็นอิสระจากการอ้างอิงที่เกี่ยวข้องกับ View ใด ๆ ดังนั้นจึงขอแนะนำให้ใช้INotifyPropertyChangedอินเทอร์เฟซเพื่อทำให้อ็อบเจ็กต์ Source ถูกได้ยินโดยการโยง WPF การผูกเกิดขึ้นระหว่างคุณสมบัติของแหล่งที่มาและคุณสมบัติของเป้าหมาย (ต้องเป็น a DependencyProperty) เช่นTextPropertyของTextBoxคลาสคือคุณสมบัติ DataBound ถึง (พูด) UserNameของโมเดลมุมมอง การผูก WPF มีการผูกสี่ประเภท โปรดจำไว้ว่า Binding รันบนเธรด UI เว้นแต่คุณจะระบุให้รันเป็นอย่างอื่น
UserNameคุณสมบัติของ ViewwModel โดยทางโปรแกรมคุณสมบัติจะแสดงในกล่องข้อความ นี่เป็นต้นทุนระดับกลางเนื่องจากระบบการผูกจะเฝ้าดูแหล่งที่มาของการเปลี่ยนแปลงเท่านั้นTextPropertyและUserNameคุณสมบัติจะยังคงซิงค์กันอยู่และจะอัปเดตซึ่งกันและกันหากมีการเปลี่ยนแปลง สิ่งนี้มีค่าใช้จ่ายสูงที่สุดเนื่องจากระบบการผูกต้องคอยดูการเปลี่ยนแปลงทั้งสองฝ่ายTextPropertyที่UserNameทรัพย์สินจะใช้เวลาถึงมูลค่าที่เปลี่ยนแปลง นี่เป็นต้นทุนระดับกลางอีกครั้งเนื่องจากระบบการเชื่อมโยงเฝ้าดูTargetสำหรับการเปลี่ยนแปลงเท่านั้นLabel, TextBlockฯลฯหากคุณไม่ได้กล่าวถึงอะไรเลยทุกคุณสมบัติเป้าหมายจะมีโหมดการเชื่อมโยงเริ่มต้นที่เชื่อมโยงกับตัวมันเอง เช่นTextPropertyของ a TextBoxมีโหมดการโยงเริ่มต้นเป็นTwoWay. สำหรับTextPropertyวิธีTextBlockนี้ก็เป็นวิธีหนึ่ง
ขอแนะนำให้คุณเลือกโหมดที่เหมาะสมเนื่องจากสามารถช่วยลดเวลาแฝงของแอปพลิเคชันโดยเฉพาะอย่างยิ่งในกรณีที่คุณมีการควบคุมจำนวนมากใน UI ของคุณ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ MVVM นี่คือบทความที่เขียนโดยฉัน