คุณสมบัติการพึ่งพาคืออะไร?


136

คุณสมบัติการพึ่งพาใน. Net คืออะไร (โดยเฉพาะในบริบท WPF) ความแตกต่างจากสถานที่ให้บริการปกติคืออะไร?

คำตอบ:


94

คุณสมบัติการพึ่งพาเป็นคุณสมบัติของคลาสที่สืบทอดมาจาก DependencyObject และพวกมันพิเศษในนั้นแทนที่จะใช้เพียงแค่เขตข้อมูลสำรองเพื่อเก็บค่าของพวกเขาพวกเขาใช้วิธีการช่วยเหลือบางอย่างใน DependencyObject

สิ่งที่ดีที่สุดเกี่ยวกับพวกเขาคือพวกเขามีระบบประปาทั้งหมดสำหรับเชื่อมโยงข้อมูลในตัวหากคุณผูกอะไรกับพวกเขาพวกเขาจะแจ้งให้ทราบเมื่อมีการเปลี่ยนแปลง


36
ที่ยังบอกฉันน้อยมากเกี่ยวกับสิ่งที่สามารถพึ่งพาทรัพย์สินหรือทำไมมันมีอยู่ คุณไม่ได้กล่าวถึงคุณสมบัติที่มีค่าที่สุดของพวกเขาแก้ปัญหาค่าทรีองค์ประกอบ
ProfK

สวัสดี @MattHamilton ขอบคุณสำหรับคำตอบของคุณ - แต่คุณหมายถึงอะไรโดย "พวกเขาใช้วิธีการช่วยเหลือบางอย่างใน DependencyObject"
BKSpurgeon

2
@BKSpurgeon DependencyObject มีวิธีการบางอย่างเช่น "SetValue" และ "GetValue" ซึ่งคุณเรียกเพื่อบันทึก / อ่านค่าของคุณสมบัติการพึ่งพาแทนที่จะใช้เขตข้อมูลสำรอง
Matt Hamilton

91

คำอธิบายเดียวที่ฉันคิดว่ามีประโยชน์และเขียนได้ดีคืออันนี้: http://www.wpftutorial.net/dependencyproperties.html

โดยพื้นฐานแล้ว DependencyProperties แตกต่างจากคุณสมบัติปกติที่ไม่ได้เป็นเพียง setters / getters สำหรับเขตข้อมูลในชั้นเรียน แต่พวกเขาดึงค่าที่แท้จริงของพวกเขาแบบไดนามิกในช่วงรันไทม์ SetValue()วิธีการ DPs ตรงไปตรงสวยและการตั้งค่าในท้องถิ่นของโรงแรมไปยังค่าที่คุณให้มัน อย่างไรก็ตามเมื่อคุณลองใช้GetValue()จาก DependencyProperty ก่อนอื่นมันจะค้นหาค่าโลคัลหากไม่มีอยู่ (ซึ่งทำงานได้ใน DependencyProperties ซึ่งแตกต่างจากคุณสมบัติทั่วไป) มันจะดำเนินการต่อไปตามแผนผัง UI แบบโลจิคัลจนกว่าจะพบค่าดังกล่าว หากเฟรมเวิร์กมาถึงด้านบนของทรีโดยไม่ต้องค้นหาค่าใด ๆ ในพื้นที่มันจะใช้ค่าเริ่มต้นที่กำหนดไว้ล่วงหน้าเป็นค่าของคุณสมบัติ

วิธีนี้ช่วยให้ DependencyProperties ใช้หน่วยความจำน้อยกว่าคุณสมบัติปกติเนื่องจากเฉพาะค่าที่ผู้ใช้กำหนดอย่างชัดเจนจะถูกเก็บไว้ภายในเครื่อง

และดังกล่าวข้างต้น DependencyProperties ยังช่วยให้เราสามารถผูกกับพวกเขาในรหัส XAML และตั้งค่าทริกเกอร์กับพวกเขาซึ่งในคุณสมบัติปกติไม่ได้รับอนุญาต

ฉันหวังว่าฉันจะจัดการกับความคลุมเครือบางอย่าง :)


2
และ "คุณสมบัติที่แนบมา" คืออะไร
พอล - เซบาสเตียน Manole

12
คุณสมบัติที่แนบมานั้นเป็นคุณสมบัติที่ไม่ได้เป็นของรายการปัจจุบันที่กำลังประกาศ แต่จะมีผลกับวัตถุอื่น ตัวอย่างเช่น: Grid.Row="1"on a Buttonจะตั้งค่าให้อยู่ใน Row # 2 บนพาเรนต์Grid(เนื่องจากข้อเท็จจริงที่ว่าแถวนั้นเป็นแบบ zero-based) แต่RowDependencyProperty เป็นของGridวัตถุ
Jonathan Perry

2
เมื่อคุณพูดDependencyProperties also allow us to bind to them in the XAML code and set triggers on them, which on regular properties is not allowedคุณหมายถึงทั้งการรวมใน XAML และการตั้งค่าทริกเกอร์หรือการตั้งค่าทริกเกอร์ไม่ได้รับอนุญาต ขอบคุณสำหรับการติดตามและช่วยทำให้สิ่งต่าง ๆ ชัดเจนขึ้น!
พอล - เซบาสเตียน Manole

@ Paul-SebastianManole DataTriggers ทำงานบนคุณสมบัติปกติเช่นกัน สมมติว่าคุณมีValueคุณสมบัติ (ไม่ใช่ DP) ที่มีค่า 0 และคุณต้องการให้มุมมองของคุณทำอะไรบางอย่างเมื่อValueเปลี่ยนเป็น 1 คุณจะสามารถใช้DataTriggerและตั้งค่าได้Binding={Binding Path=Value, Value=1}
Jonathan Perry

36

http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ให้คำอธิบายที่ดีเกี่ยวกับคุณสมบัติการพึ่งพาทั้งในบริบทของ WF และ WPF

ข้อความที่ตัดตอนมา:

จุดสำคัญ - มีการแก้ไขค่าคุณสมบัติการพึ่งพา

เป้าหมายสูงสุดของคุณสมบัติการพึ่งพาเช่นทรัพย์สินใด ๆ คือการจัดการของรัฐ แต่ไม่เหมือนกับคุณสมบัติ. Net ทั่วไปค่าคุณสมบัติโลคัลจะไม่ถูกเก็บไว้ในตัวแปรอินสแตนซ์

แต่คุณสมบัติการพึ่งพาจะถูกลงทะเบียนด้วยกรอบคุณสมบัติการพึ่งพาและค่าคุณสมบัติพื้นฐานได้รับการแก้ไข - หมายถึงค่าถูกกำหนดโดยกรอบคุณสมบัติการพึ่งพาตามกฎที่กำหนดโดยการลงทะเบียนคุณสมบัติ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.