คุณสมบัติการพึ่งพาใน. Net คืออะไร (โดยเฉพาะในบริบท WPF) ความแตกต่างจากสถานที่ให้บริการปกติคืออะไร?
คุณสมบัติการพึ่งพาใน. Net คืออะไร (โดยเฉพาะในบริบท WPF) ความแตกต่างจากสถานที่ให้บริการปกติคืออะไร?
คำตอบ:
คุณสมบัติการพึ่งพาเป็นคุณสมบัติของคลาสที่สืบทอดมาจาก DependencyObject และพวกมันพิเศษในนั้นแทนที่จะใช้เพียงแค่เขตข้อมูลสำรองเพื่อเก็บค่าของพวกเขาพวกเขาใช้วิธีการช่วยเหลือบางอย่างใน DependencyObject
สิ่งที่ดีที่สุดเกี่ยวกับพวกเขาคือพวกเขามีระบบประปาทั้งหมดสำหรับเชื่อมโยงข้อมูลในตัวหากคุณผูกอะไรกับพวกเขาพวกเขาจะแจ้งให้ทราบเมื่อมีการเปลี่ยนแปลง
คำอธิบายเดียวที่ฉันคิดว่ามีประโยชน์และเขียนได้ดีคืออันนี้: http://www.wpftutorial.net/dependencyproperties.html
โดยพื้นฐานแล้ว DependencyProperties แตกต่างจากคุณสมบัติปกติที่ไม่ได้เป็นเพียง setters / getters สำหรับเขตข้อมูลในชั้นเรียน แต่พวกเขาดึงค่าที่แท้จริงของพวกเขาแบบไดนามิกในช่วงรันไทม์ SetValue()วิธีการ DPs ตรงไปตรงสวยและการตั้งค่าในท้องถิ่นของโรงแรมไปยังค่าที่คุณให้มัน อย่างไรก็ตามเมื่อคุณลองใช้GetValue()จาก DependencyProperty ก่อนอื่นมันจะค้นหาค่าโลคัลหากไม่มีอยู่ (ซึ่งทำงานได้ใน DependencyProperties ซึ่งแตกต่างจากคุณสมบัติทั่วไป) มันจะดำเนินการต่อไปตามแผนผัง UI แบบโลจิคัลจนกว่าจะพบค่าดังกล่าว หากเฟรมเวิร์กมาถึงด้านบนของทรีโดยไม่ต้องค้นหาค่าใด ๆ ในพื้นที่มันจะใช้ค่าเริ่มต้นที่กำหนดไว้ล่วงหน้าเป็นค่าของคุณสมบัติ
วิธีนี้ช่วยให้ DependencyProperties ใช้หน่วยความจำน้อยกว่าคุณสมบัติปกติเนื่องจากเฉพาะค่าที่ผู้ใช้กำหนดอย่างชัดเจนจะถูกเก็บไว้ภายในเครื่อง
และดังกล่าวข้างต้น DependencyProperties ยังช่วยให้เราสามารถผูกกับพวกเขาในรหัส XAML และตั้งค่าทริกเกอร์กับพวกเขาซึ่งในคุณสมบัติปกติไม่ได้รับอนุญาต
ฉันหวังว่าฉันจะจัดการกับความคลุมเครือบางอย่าง :)
Grid.Row="1"on a Buttonจะตั้งค่าให้อยู่ใน Row # 2 บนพาเรนต์Grid(เนื่องจากข้อเท็จจริงที่ว่าแถวนั้นเป็นแบบ zero-based) แต่RowDependencyProperty เป็นของGridวัตถุ
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 และการตั้งค่าทริกเกอร์หรือการตั้งค่าทริกเกอร์ไม่ได้รับอนุญาต ขอบคุณสำหรับการติดตามและช่วยทำให้สิ่งต่าง ๆ ชัดเจนขึ้น!
Valueคุณสมบัติ (ไม่ใช่ DP) ที่มีค่า 0 และคุณต้องการให้มุมมองของคุณทำอะไรบางอย่างเมื่อValueเปลี่ยนเป็น 1 คุณจะสามารถใช้DataTriggerและตั้งค่าได้Binding={Binding Path=Value, Value=1}
http://techpunch.wordpress.com/2008/09/25/wpf-wf-what-is-a-dependency-property/ให้คำอธิบายที่ดีเกี่ยวกับคุณสมบัติการพึ่งพาทั้งในบริบทของ WF และ WPF
ข้อความที่ตัดตอนมา:
จุดสำคัญ - มีการแก้ไขค่าคุณสมบัติการพึ่งพา
เป้าหมายสูงสุดของคุณสมบัติการพึ่งพาเช่นทรัพย์สินใด ๆ คือการจัดการของรัฐ แต่ไม่เหมือนกับคุณสมบัติ. Net ทั่วไปค่าคุณสมบัติโลคัลจะไม่ถูกเก็บไว้ในตัวแปรอินสแตนซ์
แต่คุณสมบัติการพึ่งพาจะถูกลงทะเบียนด้วยกรอบคุณสมบัติการพึ่งพาและค่าคุณสมบัติพื้นฐานได้รับการแก้ไข - หมายถึงค่าถูกกำหนดโดยกรอบคุณสมบัติการพึ่งพาตามกฎที่กำหนดโดยการลงทะเบียนคุณสมบัติ