Salt okunur bağımlılık özellikleri (WPF .NET)
Özellik değerlerinin kodunuzun dışından ayarlanmasını önlemek için salt okunur bağımlılık özelliklerini kullanabilirsiniz. Bu makalede, mevcut salt okunur bağımlılık özellikleri ve özel salt okunur bağımlılık özelliği oluşturmaya yönelik senaryolar ve teknikler ele alınmaktadır.
Önkoşullar
Makalede bağımlılık özellikleri hakkında temel bilgiler edindiğiniz ve Bağımlılık özelliklerine genel bakış makalesini okuduğunuz varsayılır. Bu makaledeki örnekleri takip etmek için Genişletilebilir Uygulama biçimlendirme dili (XAML) hakkında bilgi sahibi olmanız ve WPF uygulamalarının nasıl yazabileceğinizi bilmeniz yardımcı olur.
Mevcut salt okunur bağımlılık özellikleri
Salt okunur bağımlılık özellikleri genellikle durumu bildirir ve erişimci public
aracılığıyla değiştirilemez. Örneğin, Windows Presentation Foundation (WPF) çerçevesi özelliği salt okunur olarak uygular IsMouseOver çünkü değeri yalnızca fare girişi tarafından belirlenmelidir. Diğer girişlere izin verilirse IsMouseOver
, değeri fare girişiyle tutarsız hale gelebilir. Erişimci public
aracılığıyla ayarlanmasa da, birçok mevcut salt okunur bağımlılık özelliği birden çok giriş tarafından belirlenen değerlere sahiptir.
Salt okunur bağımlılık özelliklerinin kullanımları
Salt okunur bağımlılık özellikleri, bağımlılık özelliklerinin normalde bir çözüm sunduğu çeşitli senaryolarda geçerli değildir. Geçerli olmayan senaryolar arasında veri bağlama, bir değere stil uygulama, doğrulama, animasyon ve devralma sayılabilir. Ancak, salt okunur bağımlılık özelliği bir stilde özellik tetikleyicisi olarak kullanılabilir. Örneğin, IsMouseOver fare üzerine geldiğinde denetimin arka planında, ön planında veya diğer görünür özelliğinde yapılan değişiklikleri tetiklemede yaygın olarak kullanılır. WPF özellik sistemi salt okunur bağımlılık özelliklerindeki değişiklikleri algılar ve raporlar, böylece özellik tetikleyici işlevselliğini destekler. Salt okunur bağımlılık özellikleri, koleksiyon nesnesinin kendisi değil, yalnızca koleksiyon öğelerinin yazılabilir olması gereken koleksiyon türü bağımlılık özelliği uygulanırken de yararlıdır. Daha fazla bilgi için bkz . Koleksiyon türü bağımlılık özellikleri.
Not
Bir stilde özellik tetikleyicileri olarak yalnızca ortak dil çalışma zamanı özellikleri değil yalnızca bağımlılık özellikleri kullanılabilir.
Özel salt okunur bağımlılık özellikleri oluşturma
Salt okunur bir bağımlılık özelliği oluşturmadan önce, geçerli olmayan senaryoları denetleyin.
Salt okunur bağımlılık özelliği oluşturma işlemi, şu farklarla birlikte okuma-yazma bağımlılık özellikleri oluşturmaya benzer birçok şekilde gerçekleştirilir:
Salt okunur özelliğinizi kaydederken yerine öğesini çağırın RegisterReadOnly Register.
CLR özellik sarmalayıcısını uygularken, ortak
set
erişimciye sahip olmadığından emin olun.RegisterReadOnly
DependencyPropertyyerine döndürürDependencyPropertyKey. öğesiniDependencyPropertyKey
bir nonpublic sınıf üyesinde depolayın.
Seçtiğiniz mantığı kullanarak salt okunur bağımlılık özelliğinizin değerini belirleyebilirsiniz. Özellik değerini başlangıçta veya çalışma zamanı mantığının bir parçası olarak ayarlamanın önerilen yolu, türünde DependencyPropertyKey
bir parametre kabul eden aşırı yüklemesini SetValue kullanmaktır. özelliğini SetValue
kullanmak, özellik sistemini aşmak ve yedekleme alanını doğrudan ayarlamak için tercih edilir.
Uygulamanızda salt okunur bağımlılık özelliğinin değerini nasıl ve nerede ayarladığınız, öğesini depolayan DependencyPropertyKey
sınıf üyesine atadığınız erişim düzeyini etkiler. Özellik değerini yalnızca bağımlılık özelliğini kaydeden sınıfın içinden ayarlarsanız, bir private
erişim değiştirici kullanabilirsiniz. Bağımlılık özelliklerinin değerlerinin birbirini etkilediği senaryolarda, değer değişikliklerini tetikleme amacıyla eşleştirilmiş PropertyChangedCallback ve CoerceValueCallback geri çağırmaları kullanabilirsiniz. Daha fazla bilgi için bkz . Bağımlılık özelliği meta verileri.
Salt okunur bağımlılık özelliğinin değerini kaydeden sınıfın dışından değiştirmeniz gerekiyorsa, için DependencyPropertyKey
bir internal
erişim değiştirici kullanabilirsiniz. Örneğin, aynı derlemedeki bir olay işleyicisinden çağırabilirsiniz SetValue
. Aşağıdaki örnek, salt okunur bağımlılık özelliğini FishCount
oluşturmak için çağrısında RegisterReadOnly
bulunan bir Aquarium sınıfını tanımlar. DependencyPropertyKey
bir alana atanırinternal static readonly
, böylece aynı derlemedeki kod salt okunur bağımlılık özellik değerini değiştirebilir.
public class Aquarium : DependencyObject
{
// Register a dependency property with the specified property name,
// property type, owner type, and property metadata.
// Assign DependencyPropertyKey to a nonpublic field.
internal static readonly DependencyPropertyKey FishCountPropertyKey =
DependencyProperty.RegisterReadOnly(
name: "FishCount",
propertyType: typeof(int),
ownerType: typeof(Aquarium),
typeMetadata: new FrameworkPropertyMetadata());
// Declare a public get accessor.
public int FishCount =>
(int)GetValue(FishCountPropertyKey.DependencyProperty);
}
Public Class Aquarium
Inherits DependencyObject
' Register a dependency property with the specified property name,
' property type, owner type, And property metadata.
' Assign DependencyPropertyKey to a nonpublic field.
Friend Shared ReadOnly FishCountPropertyKey As DependencyPropertyKey =
DependencyProperty.RegisterReadOnly(
name:="FishCount",
propertyType:=GetType(Integer),
ownerType:=GetType(Aquarium),
typeMetadata:=New FrameworkPropertyMetadata())
' Declare a public get accessor.
Public ReadOnly Property FishCount As Integer
Get
Return GetValue(FishCountPropertyKey.DependencyProperty)
End Get
End Property
End Class
WPF özellik sistemi kodunuzun DependencyPropertyKey dışına yayılmadığından, salt okunur bağımlılık özellikleri okuma-yazma bağımlılık özelliklerinden daha iyi yazma güvenliğine sahiptir. Yazma erişimini başvurusu DependencyPropertyKey
olan kişilerle sınırlamak istediğinizde salt okunur bağımlılık özelliği kullanın.
Buna karşılık, okuma-yazma bağımlılık özellikleri için bağımlılık özelliği tanımlayıcısı, hangi erişim değiştiriciyi atadığınızdan bağımsız olarak özellik sistemi üzerinden erişilebilir. Daha fazla bilgi için bkz . Bağımlılık özelliği güvenliği.
Ayrıca bkz.
.NET Desktop feedback