Necesito definir nuevos elementos de la interfaz de usuario así como el enlace de datos en el código porque se implementarán después del tiempo de ejecución. Aquí hay una versión simplificada de lo que estoy tratando de hacer.Problema con la vinculación de datos WPF definida en el código No actualizar elementos de la interfaz de usuario
Modelo de datos:
public class AddressBook : INotifyPropertyChanged
{
private int _houseNumber;
public int HouseNumber
{
get { return _houseNumber; }
set { _houseNumber = value; NotifyPropertyChanged("HouseNumber"); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string sProp)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(sProp));
}
}
}
Encuadernación en Código:
AddressBook book = new AddressBook();
book.HouseNumber = 123;
TextBlock tb = new TextBlock();
Binding bind = new Binding("HouseNumber");
bind.Source = book;
bind.Mode = BindingMode.OneWay;
tb.SetBinding(TextBlock.TextProperty, bind); // Text block displays "123"
myGrid.Children.Add(tb);
book.HouseNumber = 456; // Text block displays "123" but PropertyChanged event fires
Cuando los datos se une primero, el bloque de texto se actualiza con el número de la casa correcta. Luego, si cambio el número de la casa en el código más tarde, se activa el evento PropertyChanged del libro, pero el bloque de texto no se actualiza. puede alguien decirme por que?
Gracias, Ben
¿Ha intentado establecer puntos de interrupción para ver si se golpean cuando establece la propiedad? – John
Sí, tengo un cuadro de mensaje emergente cuando se activa el evento PropertyChanged del libro, que ocurre en cada actualización de datos. –
La [respuesta más interesante] (http: // stackoverflow.com/a/406595/200449), IMO, es por @StevenRobbins, aunque está infravalorado y luego enterrado dentro de otras respuestas –