Yo soy un poco nuevo para el enlace de datos y, obviamente, realmente no lo entiendo. Estoy tratando de enlazar un simple .de la propiedad netas a una etiqueta, y tener esa etiqueta actualizada cada vez que se cambia la propiedad. No es de trabajo y no estoy seguro de dónde está el problema.

Aquí está mi XAML

 <Label Content="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}"></Label>

 <Button Name="bChangeProperty" Click="bChangeProperty_Click">Change Property</Button>

Aquí está mi UserControl cs archivo

public partial class MyUserControl : UserControl, INotifyPropertyChanged
{

   private MyObjectClass _myObject;
   public MyObjectClass MyProperty
   {
       get { return _myObject;}
       set
       {
          if (_myObject != value)
          {
              _myObject = value;
              OnPropertyChanged("MyProperty"); 
          }
        }
   }


   public MyUserControl(MyObjectClass obj)
   {
      if (obj == null)
      {
          obj = new MyObjectClass();
          obj.Name = "Frank";
      }
      MyProperty= obj;
      base.DataContext = MyProperty;
   }

   //INotifyPropertyChanged stuff
   public event PropertyChangedEventHandler PropertyChanged;
   private void OnPropertyChanged(string propertyName)
   {
      //PropertyChanged is always null, don't really understand this part
      if (PropertyChanged != null)
         PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
   }


   private void bChangeProperty_Click(object sender, RoutedEventArgs e)
   {
       //Create a new object, and set it to the MyProperty Property - which I thought
       //would update the label, but it doesn't
       MyObjectClass newObject = new MyObjectClass();
       newObject.Name = "Bob";

       MyProperty= newObject;
   }

Aquí es el MyObjectClass

public class MyObjectClass
{
    public string Name {get; set;}
}

La inicial de enlazar las obras, establecerá la Etiqueta de «Frank», pero cuando hago clic en el botón y se cambia el objeto, la etiqueta no se actualizará. Este es sólo un ejemplo de algo «como» lo que estoy tratando de hacer.

Tengo PropertyChanged a algo en algún lugar? Tengo un poco de pensamiento eso es lo que el XAML se supone que debe hacer, pero viendo cómo es siempre nulo, al parecer no lo es.

  • OnPropertyChanged("MyProperty"); ihh el nombre de la propiedad en una cadena. Malolientes. Recomiendo la lamda expresión truco.
InformationsquelleAutor Kyle | 2011-03-31

2 Comentarios

  1. 5

    Que usted necesita para implementar INotifyPropertyChanged en MyObjectClass y fuego PropertyChanged después de MyObjectClass.Name fue cambiado.

    public class MyObjectClass : INotifyPropertyChanged
    {
        private string name;
    
        public string Name 
        {
            get
            {
                return this.name;
            }
            set
            {
                this.name = value;
                OnPropertyChanged("Name"); 
            } 
        }
    
        public event PropertyChangedEventHandler PropertyChanged;
    
        private void OnPropertyChanged(string propertyName)
        {      
           if (PropertyChanged != null)
              PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
  2. 3

    Se establece el DataContext en su constructor para que apunte a la inicial de «Frank» el objeto, pero al cambiar la instancia que MyProperty puntos para no actualizar el DataContext en consecuencia.

    Por lo tanto, la solución es añadir esto:

    private void bChangeProperty_Click(object sender, RoutedEventArgs e)
    {
       //Create a new object, and set it to the MyProperty Property - which I thought
       //would update the label, but it doesn't
       MyObjectClass newObject = new MyObjectClass();
       newObject.Name = "Bob";
    
       MyProperty= newObject;
       this.DataContext = MyProperty; //ADD THIS LINE
    }

    Sin embargo, la correcta solución es no establecer la DataContext en todo y simplemente cambiar el Binding:

    <Label Content="{Binding Path=MyProperty.Name} ...
    • Gracias Jon, la actualización de la DataContext cada vez que se cambia el objeto trabajado para mí. Cambiar la Etiqueta de la unión a la ‘MyProperty.El nombre de’ deja en blanco todo el tiempo. El MyObjectClass es a partir de una Biblioteca de clases que yo no soy lo que realmente permitió a cambio, así que por ahora el lugar ‘incorrecto’ actualización de la DataContext se tiene que hacer por mí.

Dejar respuesta

Please enter your comment!
Please enter your name here