WPF Enlace a la variable local

¿Puedes vincular a una variable local como esta?

SystemDataBase.cs

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

SystemDataBase.xaml

    

??

El texto se establece en la variable local “texto”

El patrón es:

 public string Text {get;set;} 

y el enlace es

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

Si desea que el enlace se actualice automáticamente, conviene convertirlo en DependencyProperty.


Creo que 3.5 agregó ElementName a los enlaces, por lo que lo siguiente es un poco más fácil:

  

Para enlazar a una “variable” local, la variable debe ser:

  1. Una propiedad, no un campo.
  2. Público.
  3. Ya sea una propiedad de notificación (adecuada para clases de modelo) o una propiedad de dependencia (sutable para 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( ... ); } 

Si está haciendo mucho de esto, podría considerar vincular el DataContext de toda la ventana a su clase. Esto se heredará de manera predeterminada, pero aún se puede anular como de costumbre

  

Luego, para un componente individual, puede usar

 Text="{Binding Text}" 

No, tiene que ser una propiedad visible.

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

Luego en el constructor

 public Assgn5() { InitializeComponent(); this.DataContext = this; // or **stbSQLConnectionString**.DataContext = this; }