c'est mon simple xaml qui montre dans une zone de texte l'âge de la première personne dans une collection de personnes. Je ne comprends pas, je clique après que l'âge ne change pas.Wpf - problème avec la liaison à un élément de la collection
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="132*" />
<RowDefinition Height="179*" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding Persons[0].Age}" />
<Button Grid.Row="1" Click="Button_Click">Change Age</Button>
</Grid>
c'est le code derrière du XAML:
public partial class MainWindow : Window
{
public ObservableCollection<Person> Persons { get; set; }
public MainWindow() {
Persons = new ObservableCollection<Person>();
Persons.Add(new Person{Age = -1});
DataContext = this;
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e) {
(Persons[0] as Person).Age = 5;
}
}
c'est une personne de classe:
public class Person : INotifyPropertyChanged
{
private int _age;
public int Age
{
get { return _age; }
set
{
_age = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Age"));
}
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
Votre code a bien fonctionné pour moi lorsque je l'ai collé dans un projet WPF dans Visual Studio 2010 maintenant. Quelle version de WPF et Visual Studio utilisez-vous? –
A travaillé très bien pour moi. Copier/coller au projet et cela fonctionne comme un charme. Si vous définissez un point d'arrêt dans set pour Age, lance-t-il PropertyChanged ou est-il null? –