2015-10-13 12 views
5

Ho un controllo che sto utilizzando per la mia nuova applicazione. Questo controllo ha una proprietà regolare in quanto tale.Conversione di proprietà normali in proprietà di dipendenza

Public Property Value() As String 
    Get 
     If AutoCompleteTextBox.SearchText Is Nothing Then 
      Return String.Empty 
     Else 
      Return AutoCompleteTextBox.SearchText.ToString.Trim 
     End If 
    End Get 
    Set(value As String) 
     AutoCompleteTextBox.SearchText = value 
    End Set 
End Property 

Edit:

Così, dopo più tentativi, sono finalmente in questa fase.

Public Shared ValueProperty As DependencyProperty = DependencyProperty.Register("Value", GetType(String), GetType(AutoCompleteBox)) 
Public Property Value() As String 
    Get 
     Return Me.GetValue(ValueProperty).ToString 
    End Get 
    Set(value As String) 
     Me.SetValue(ValueProperty, value) 
    End Set 
End Property 
Public Event PropertyChanged As PropertyChangedEventHandler _ 
     Implements INotifyPropertyChanged.PropertyChanged 

Questa è la proprietà di dipendenza. Questa proprietà non è ancora vincolante. Nessun errore viene mostrato nella finestra di output per il binding.

Text="{Binding RelativeSource={RelativeSource Self}, Path=Value, Mode=TwoWay}" 

Questo è il mio metodo vincolante. Non ho idea di cos'altro posso fare. Almeno se c'era un errore, avrei potuto capire qualcosa. Senza alcun errore, sono solo un pollo senza testa qui.

+0

Non ho notato la prima riga della domanda. Aggiornato la mia risposta. – AnjumSKhan

+0

@jitendragarg Sarai in grado di conoscere la sintassi C# e tradurla in VB? – Ilan

+0

Sicuro. Anche questo funziona. – jitendragarg

risposta

0

Si prega di fare riferimento al seguente URL per tutti i fondamentali di dipendenza http://www.wpftutorial.net/dependencyproperties.html

In sostanza, è possibile ottenere una proprietà evento modificato di proprietà di dipendenza fornendo un FrameworkPropertyMetadata.

new FrameworkPropertyMetadata([Default Value], 
        OnCurrentTimePropertyChanged); 

E si può ottenere indietro il controllo di destinazione (DependencyObject) al gestore di eventi e implementare la logica là

private static void OnCurrentTimePropertyChanged(DependencyObject source, 
    DependencyPropertyChangedEventArgs e) 
{ 
    AutoCompleteTextBox control = source as AutoCompleteTextBox; 
    string time = (string)e.NewValue; 
    // Put some update logic here... 
} 
0

Dichiarare una proprietà di dipendenza in un controllo è una buona cosa.

Si potrebbe fare un po 'di binding in xaml (scusa non ho il tuo XAML - immagino).

Qualcosa di simile:

<TextBox x:Name="AutoCompleteTextBox" 
      Text="{Binding RelativeSource={RelativeSource=Self},Path=Value}"/> 

saluti

0

TextBox ha una proprietà chiamata Text. Quando accedi alla proprietà Text, ti verrà dato il testo inserito in TextBox. Lo stesso è il tuo caso. Ora perché vuoi convertirlo in un DP? Un DP sarebbe utile se si desidera collegare questo DP ad altri controlli.

Estendere questo controllo. Crea un nuovo controllo e presenta questo nuovo DP.

Mentre un DP viene utilizzato dove si desidera associare questa proprietà a un controllo. Questa proprietà viene aggiornata dal controllo o il controllo viene aggiornato da questo DP in base al set di modalità di binding.

come fare vincolante:

<TextBox x:Name="UserInput" /> 
    <uc:MyAutoCompleteTextBox ValueDP="{Binding Text, ElementName=UserInput, Mode=OneWay}" /> 

MyAutoCompleteTextBox è nuovo controllo che si estende (eredita) dal vecchio di controllo automatico.

Se si desidera applicare una logica di filtraggio o qualsiasi altra cosa, è possibile applicare nella vostra stessa DP come questo:

Get 
    someVariable = TryCast(Me.GetValue(ValueProperty), String) 
    ' apply somg logic to someVariable 
    ' use your old Value property from here 
    Return someVariable 
End Get 

Ci sono molti tutorial Binding WPF su rete.

vi consiglio: http://blog.scottlogic.com/2012/04/05/everything-you-wanted-to-know-about-databinding-in-wpf-silverlight-and-wp7-part-one.html

+0

Ok, quindi la cosa è che devo associare questo controllo a un datatable. Il codice corrente utilizza . Valore in milioni di posti. Quindi, non posso cambiare quel codice. Tutto quello che posso fare è creare una nuova proprietà di dipendenza che aggiorni questa proprietà. In questo modo posso usare la nuova proprietà di dipendenza nel mio codice, mentre il vecchio codice funzionerà così com'è. Ecco perché sto cercando di creare una nuova proprietà di dipendenza, chiamiamola ValueDP. Attualmente, . Valore non restituisce nulla. Non ho idea del perché. E non posso nemmeno usare ValueDP per l'associazione. – jitendragarg

+0

Il binding può essere eseguito solo con DependencyObjects. La destinazione dell'oggetto deve essere un oggetto di dipendenza. L'origine può essere una proprietà normale, ma l'origine non può essere indirizzata se la proprietà di origine non è un DP. http://blogs.msdn.com/b/wpfsdk/archive/2006/10/19/wpf-basic-data-binding-faq.aspx – AnjumSKhan

+0

@jitendragarg Non so come stai usando questo controllo. – AnjumSKhan

-1

solo cambiare il codice con codice seguente e si dovrebbe essere buono

il codice

Public Shared ReadOnly ValueProperty As DependencyProperty = DependencyProperty.Register("Value", GetType(String), GetType(AutoCompleteBox)) 
Public Property Value() As String 
Get 
    Return TryCast(Me.GetValue(ValueProperty), String) 
End Get 
Set(value As String) 
    Me.SetValue(ValueProperty, value) 
End Set 
End Property 

Nuovo codice

Public Shared ReadOnly ValueProperty As DependencyProperty = DependencyProperty.Register("Value", GetType(String), GetType(AutoCompleteBox)) 
Public Property Value() As String 
Get 
    If AutoCompleteTextBox.SearchText Is Nothing Then 
     Return String.Empty 
    Else 
     Return AutoCompleteTextBox.SearchText.ToString.Trim 
    End If 
End Get 
Set(value As String) 
    AutoCompleteTextBox.SearchText = value 
End Set 
End Property 

Questo DP fai ciò che era la tua proprietà precedente ing. Ma pensa solo alle tue esigenze, ci può essere un modo migliore di scrivere le cose.

Grazie

Problemi correlati