2009-11-12 17 views
42

que tienen esta clase:WPF: sencilla los datos de cuadro de texto vinculante

public partial class Window1 : Window 
{ 
    public String Name2; 

    public Window1() 
    { 
     InitializeComponent(); 
     Name2 = new String('a', 5); 
     myGrid.DataContext = this; 
    } 

    // ... 
} 

Y quiero mostrar la cadena Name2 en el cuadro de texto.

<Grid Name="myGrid" Height="437.274"> 
    <TextBox Text="{Binding Path=Name2}"/> 
</Grid> 

Pero la cadena no se visualiza. Además, si la cadena Name2 se actualiza periódicamente utilizando un TimerCallback, ¿tengo que hacer algo para asegurarme de que el cuadro de texto se actualice cuando cambien los datos?

+2

Como sugerencia, puede formatear el código con sangría por cuatro espacios o usando el botón 101010 - ¡se ahorra el barrer manualmente con las etiquetas br y los corchetes angulares de escape! – itowlson

Respuesta

63

Name2 es un campo. WPF se vincula solo a las propiedades. Cambiarlo a:

public string Name2 { get; set; } 

ser advertidos de que con esta implementación mínima, el cuadro de texto no responderá a los cambios programáticos a Nombre2. Así que para su escenario de actualización del temporizador, tendrá que aplicar INotifyPropertyChanged:

partial class Window1 : Window, INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    // usual OnPropertyChanged implementation 

    private string _name2; 

    public string Name2 
    { 
    get { return _name2; } 
    set 
    { 
     if (value != _name2) 
     { 
     _name2 = value; 
     OnPropertyChanged("Name2"); 
     } 
    } 
    } 
} 

usted debe considerar este movimiento a un conjunto de datos separadas objeto en vez de en su clase de la ventana.

+0

Ejemplo de MSDN sobre la implementación de la interfaz INotifyPropertyChanged (desplácese hacia abajo a la implementación de DemoCustomer): http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged(v=vs.110).aspx –

5

Su ventana no está implementando las notificaciones de enlace de datos necesarias que la cuadrícula requiere para usarlo como fuente de datos, es decir, la interfaz INotifyPropertyChanged.

Su cadena "Name2" también debe ser una propiedad y no una variable pública, ya que el enlace de datos se utiliza con las propiedades.

Implementación de las interfaces necesarias para utilizar un objeto como fuente de datos se puede encontrar here.

3

Solo para necesidades futuras.

En Visual Studio 2013 con .NET Framework 4.5, para una propiedad de ventana, intente agregar ElementName=window para que funcione.

<Grid Name="myGrid" Height="437.274"> 
    <TextBox Text="{Binding Path=Name2, ElementName=window}"/> 
</Grid> 
Cuestiones relacionadas