คุณสมบัติการพึ่งพาใน. 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) แต่Row
DependencyProperty เป็นของ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 ทั่วไปค่าคุณสมบัติโลคัลจะไม่ถูกเก็บไว้ในตัวแปรอินสแตนซ์
แต่คุณสมบัติการพึ่งพาจะถูกลงทะเบียนด้วยกรอบคุณสมบัติการพึ่งพาและค่าคุณสมบัติพื้นฐานได้รับการแก้ไข - หมายถึงค่าถูกกำหนดโดยกรอบคุณสมบัติการพึ่งพาตามกฎที่กำหนดโดยการลงทะเบียนคุณสมบัติ