2009-03-09 8 views
1

Ich habe eine Steuer individuelle Benutzer mit dem Namen Field:Silverlight Individuelle User Controls und Dependancy Eigenschaft Ausgabe

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="Auto"/> 
     <ColumnDefinition Width="*"/> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*"/> 
    </Grid.RowDefinitions> 
    <TextBlock Grid.Row="0" Grid.Column="0" Name="LblName"/> 
    <TextBox Grid.Row="0" Grid.Column="1" HorizontalContentAlignment="Left" Name="TxtValue"/> 
</Grid> 

In der CS-Datei belichten ich die unten Eigenschaft, setzt einfach die „.text“ Wert der Textbox.

public static readonly DependencyProperty ValueProperty = DependencyProperty.Register(
     "Value", 
     typeof(string), 
     typeof(Field), 
     new PropertyMetadata(
      default(string), 
      (source, args) => (source as Field).TxtValue.Text = (string)args.NewValue 
     ) 
    ); 

    [Category("Custom")] 
    public string Value 
    { 
     get 
     { 
      return (string)this.GetValue(ValueProperty); 
     } 
     set 
     { 
      this.SetValue(ValueProperty, value); 
     } 
    } 

Erste Frage. Ist dies die korrekte Art und Weise, in der wir die Abhängigkeitseigenschaften für untergeordnete Benutzersteuerelemente propagieren, die Sicherung über das übergeordnete Benutzersteuerelement, so dass es von der Seite xaml aus gesetzt werden kann? Ich habe mich im Internet umgesehen, da es nicht viel gibt, wenn man bedenkt, dass das beim Schreiben von benutzerdefinierten Steuerelementen ziemlich primitiv ist.

Geben Sie Details um das größere Bild, ich habe Kundendetailseite, einige der Steuerelemente sind an das Kundenobjekt gebunden, das in einer beobachtbaren Sammlung enthalten ist. Wenn ich den Wert des Textfelds (das in der Feldsteuerung enthalten ist) auf der Seite von "xxxx" zu "yyyy" ändere, bekomme ich immer "xxxx" zurück. Es scheint so, als würde irgendwas um den Getter herum schief gehen?

Antwort

1

Dies ist definitiv ein Schritt in die richtige Richtung, damit sich Eigenschaften ausbreiten können.

Wenn dies ein echtes benutzerdefiniertes Steuerelement ist (abgeleitet von Control), möchten Sie möglicherweise eine {TemplateBinding Value} plus verwenden, sollten Sie wahrscheinlich auch eine Verbindung zum TextChanged-Ereignis für die TextBox herstellen, nachdem Sie den Vorlageteil in der OnApplyTemplate-Methode eingerichtet haben. Auf diese Weise können Sie auch die zugrunde liegende TxtValue-Abhängigkeitseigenschaft aktualisieren.

Wenn dies ein UserControl ist, können Sie möglicherweise Binding verwenden, aber Sie haben ein paar weniger Optionen zu gehen. Wie Sie es haben, Ihre Eigenschaft geändert Callback-Funktion ist nur in eine Richtung gehen: Sie setzen nur den Text Wert, Sie reagieren nie darauf.

Hoffen wir, dass die Dokumentation da draußen verbessert.

Verwandte Themen