2009-09-26 20 views
17

¿Se puede vincular a una variable local como esta?WPF Enlace a la variable local

SystemDataBase.cs

namespace WebWalker 
{ 
    public partial class SystemDataBase : Window 
    { 
     private string text = "testing"; 
... 

SystemDataBase.xaml

<TextBox 
     Name="stbSQLConnectionString" 
     Text="{SystemDataBase.text}"> 
</TextBox> 

??

texto se establece en la variable "texto" local

Respuesta

0

No tiene que ser una propiedad visible.

30

El patrón es:

public string Text {get;set;} 

y la unión es

{Binding Text, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}} 

Si desea que la unión para actualizar automáticamente que debe hacer un DependencyProperty.


Creo 3.5 añade ElementName a consolidaciones, por lo que el siguiente es un poco más fácil:

<Window x:Name="Derp" ... 
    <TextBlock Text="{Binding Text, ElementName=Derp}"/> 
+3

O es que la clase práctica INotifyPropertyChanged tener el trabajo automáticamente vinculante. –

+1

Creo que quieres decir cambiarlo a DependencyProperty. Implementar INPC en un DependencyObject sería una tontería. – Will

+7

+1 para derp! lol – windowskm

22

que se unen a un local de "variable" de la variable debe ser:

  1. Un propiedad, no un campo.
  2. Público.
  3. Cualquiera de una propiedad de notificación (adecuado para las clases del modelo) o una propiedad de dependencia (sutable de clases de vista)

Ejemplos:

public MyClass : INotifyPropertyChanged 
{ 
    private void PropertyType myField; 

    public PropertyType MyProperty 
    { 
     get 
     { 
      return this.myField; 
     } 
     set 
     { 
      if (value != this.myField) 
      { 
       this.myField = value; 
       NotifyPropertyChanged("MyProperty"); 
      } 
     } 
    } 

    protected void NotifyPropertyChanged(String propertyName) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

public MyClass : DependencyObject 
{ 
    public PropertyType MyProperty 
    { 
     get 
     { 
      return (PropertyType)GetValue("MyProperty"); 
     } 
     set 
     { 
      SetValue("MyProperty", value); 
     } 
    } 

    // Look up DependencyProperty in MSDN for details 
    public static DependencyProperty MyPropertyProperty = DependencyProperty.Register(...); 
} 
12

Si estás haciendo un montón de esto, se podía Considere vincular el DataContext de toda la ventana a su clase. Esta será heredado por defecto, pero aún se puede anular como de costumbre

<Window DataContext="{Binding RelativeSource={RelativeSource Self}}"> 

A continuación, durante componentes individuales se puede utilizar

Text="{Binding Text}" 
+0

Sé que esta pregunta es para WPF, pero si su objetivo es Silverlight, este es el camino a seguir ... Dado que Silverlight para Web y teléfono no tiene método FindAncestor para RelativeSource – Adarsha

0

Para enlazar una variable local que está presente en su clase de ventana que tiene ser: 1. Propiedad pública 2. Una propiedad notificante. Para esto, su clase de ventana debe implementar la interfaz INotifyPropertyChanged para esta propiedad.

A continuación, en el constructor

public Assgn5() 
{   
    InitializeComponent(); 

    this.DataContext = this; // or **stbSQLConnectionString**.DataContext = this; 
} 

<TextBox 
    Name="stbSQLConnectionString" 
    Text="{Binding text}"> 
</TextBox> 
Cuestiones relacionadas