ฉันไม่เข้าใจโหมดการผูกข้อมูลต่างๆใน WPF เช่น:
- ทางเดียว
- สองทาง
- ครั้งหนึ่ง
- ฯลฯ ...
แต่ละโหมดเหล่านี้หมายถึงอะไร?
ควรใช้เมื่อใด
ฉันไม่เข้าใจโหมดการผูกข้อมูลต่างๆใน WPF เช่น:
แต่ละโหมดเหล่านี้หมายถึงอะไร?
ควรใช้เมื่อใด
คำตอบ:
OneWay
: ใช้สิ่งนี้เมื่อคุณต้องการให้คุณสมบัติที่ถูกผูกไว้เพื่ออัพเดตอินเทอร์เฟซผู้ใช้TwoWay
: มีพฤติกรรมเดียวกันOneWay
และOneWayToSource
รวมกัน คุณสมบัติที่ถูกผูกไว้จะอัพเดตอินเทอร์เฟซผู้ใช้และการเปลี่ยนแปลงในอินเทอร์เฟซผู้ใช้จะอัปเดตคุณสมบัติที่ถูกผูกไว้ (คุณจะใช้สิ่งนี้กับ a TextBox
หรือCheckbox
ตัวอย่าง)OneTime
: สิ่งนี้มีลักษณะการทำงานเหมือนกับOneWay
ยกเว้นว่าจะอัปเดตอินเทอร์เฟซผู้ใช้เพียงครั้งเดียว นี่ควรเป็นตัวเลือกเริ่มต้นของคุณสำหรับการผูก (ด้วยเหตุผลหลายประการฉันจะไม่อธิบายรายละเอียดในที่นี้) คุณควรใช้การผูกประเภทอื่นก็ต่อเมื่อคุณต้องการฟังก์ชันพิเศษเท่านั้นOneWayToSource
: นี่คือสิ่งที่ตรงกันข้ามกับOneWay
- การเปลี่ยนแปลงค่าอินเทอร์เฟซผู้ใช้อัพเดตคุณสมบัติที่ถูกผูกไว้หากคุณไม่ระบุอะไรเลยพฤติกรรมจะขึ้นอยู่กับการควบคุมที่คุณใช้
สำหรับข้อมูลเพิ่มเติมโปรดดูที่BindingMode
enum ใน 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 นี่คือบทความที่เขียนโดยฉัน