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.

  • RegisterReadOnlyDependencyPropertyyerine döndürürDependencyPropertyKey. öğesini DependencyPropertyKey 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 DependencyPropertyKeybir 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 DependencyPropertyKeysı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 DependencyPropertyKeybir 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 FishCountoluş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 DependencyPropertyKeyolan 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.