Cosa ti aspettavi? L'evento PropertyChanged viene utilizzato dal codice dell'interfaccia utente, ma non in questo senso. I controlli non implementano mai INPC (abbreviazione di INotifyPropertyChanged), sono obbligati a obiettare che hanno implementato INPC. In questo modo alcune proprietà dell'interfaccia utente, ad es. la proprietà Text sul controllo TextBox è associata a una proprietà su tale classe. Questa è la base dell'architettura MVVM.
esempio, si potrebbe scrivere il seguente codice XAML:
<TextBlock x:Name="txtBox" Text="{Binding Title}" />
e si imposta il contesto dati per TextBlock (o qualsiasi suo antenato, DataContext si propaga) nel codice nel modo seguente:
txtBox.DataContext = new Movie {Title = "Titanic"};
E ora per la classe stessa:
public class Movie : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyPropertyChanged(string info)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
private string _title;
public string Title
{
get { return _title; }
set
{
if (_title == value) return;
_title = value;
NotifyPropertyChanged("Title");
}
}
}
ora, ogni volta che si ch Ange la proprietà Title, sia nel codice che tramite altri binding, l'interfaccia utente verrà automaticamente aggiornata. Google for Data Binding e MVVM.
fonte
2012-09-17 20:03:13
Non funziona come hai fatto tu. Basta creare una classe extra e implementare l'interfaccia di notifica lì e applicare questa classe al DataContext di UserControl. E funzionerà come hai bisogno. –