Frage

Dies ist, wie ich ein DependencyProperty registrieren:

    public static readonly DependencyProperty UserProperty = 
        DependencyProperty.Register("User", typeof (User), 
             typeof (NewOnlineUserNotifier));                                                                                                                 


    public User User
    {
        get
        {
            return (User)GetValue(UserProperty);
        }
        set
        {
            SetValue(UserProperty, value);
        }
    }

Der dritte Parameter der DependencyProperty.Register Methode erfordert, dass Sie die Art der Steuerung zu bestimmen, wo die Abhängigkeitseigenschaft in befindet (in diesem Fall meine User Control genannt wird NewOnlineUserNotifier).

Meine Frage ist, Warum eigentlich Sie die Art des Eigentümers angeben, und was passiert, wenn Sie einen anderen Typ als der tatsächliche Eigentümer geben?

War es hilfreich?

Lösung

Die Art, dass Sie die Register-Methode aufrufen, von nicht der De-facto-Eigentümer der Immobilie, daher können Sie nicht einen anderen Typ als der tatsächliche Eigentümer angeben, da die von Ihnen angegebenen Typ ist die tatsächliche Inhaber.

Ein Beispiel, wo dies sinnvoll sein kann, ist, wenn Sie ein benutzerdefiniertes Steuerelement erstellen, die andere Steuerelemente enthält. Zuvor mit WinForms, wenn Sie hatte einige zusätzliche Informationen, die nur nützlich zu diesem Container war, aber semantisch gehörte dem Kind, dann ist das Beste, was Sie tun konnte, war Platz, die Informationen in der Halte alle „Tag“ Eigenschaft. Diese beiden entfernt Typsicherheit und Sie waren nie sicher, dass eine andere Klasse würde in dem Tag nicht versuchen und zu speichern etwas anderes. Jetzt mit WPF Abhängigkeitseigenschaften können Sie Werte Objekte ohne das Objekt binden sich um den Wert zu halten. Ein einfaches Beispiel:

public class ButtonContainer : Control
{
    public Button ChildButton { get; set; }

    public static readonly DependencyProperty FirstOwnerProperty =
    DependencyProperty.Register("FirstOwner", typeof(ButtonContainer),
         typeof(Button));

    public ButtonContainer()
    {
        ChildButton = new Button();
        ChildButton.SetValue(FirstOwnerProperty, this);
    }

}

Jetzt hat die Taste eine zusätzliche Eigenschaft, die sinnvoll ist, nur im Rahmen der ButtonContainer und kann nur im Rahmen der ButtonContainer zugegriffen werden. - wie ein typsicher, verkapselte Tag

Um die neue Klasse verwendet wie folgt:

ButtonContainer container1 = new ButtonContainer();

ButtonContainer container2 = new ButtonContainer();
container2.ChildButton = container1.ChildButton;

Wie der ChildButton von einem Behälter in einen anderen verschoben wird, der Wert seiner FirstOwnerProperty reist mit ihm, als ob es ein echtes Mitglied der Button-Klasse war. Container2 nennen kann ChildButton.GetValue (FirstOwnerProperty) und finden Sie heraus, welche ButtonContainer ursprünglich die Schaltfläche erstellt wurde (warum es wollen könnte, dies zu tun ist für den Leser als Übung ...). All dies ist möglich, ohne die Notwendigkeit, den Knopf zu einer engen Spezialität Unterklasse.

Andere Tipps

Das ist, weil die gleiche DependencyProperty kann unterschiedlich definiert werden (mit unterschiedlichen Metadaten) für verschiedene Arten

Auf den Punkt gebracht, wenn Sie einen DP sind Registrierung, die Sie hinzufügen, ein Objekt (DP) zu einer Liste zu einer Klasse (Inhaber) angebracht ist. Dieser Vorgang ist nur „lebt“ in der Klasse, in der sie deklariert ist und oft ist es nicht verwandt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top