WPF : TextBlock et Label non mis à jour après modification de la source
Bonjour,
Je suis en train de plus ou moins débuter en WPF et j'en suis au Data Binding. Je suis sur un exemple de https://wpf-tutorial.com/fr/38/data-...x-changements/
Cela fonctionne très bien, mais moi je voudrais rafraichir un TextBlock et un Label après que la source de données ait changé, mais cela ne fonctionne pas. Est-ce que quelqu'un pourrait me dire pourquoi, parce que je pédale un peu dans la semoule depuis un bon moment :-(
Voici la partie XAML :
Code:
1 2 3 4 5 6 7 8 9 10
|
<Grid Margin="10">
<Button Name="btnAddUser" Click="btnAddUser_Click" Margin="650,0,0,371">Add user</Button>
<Button Name="btnChangeUser" Click="btnChangeUser_Click" Margin="650,59,0,313">Change user</Button>
<Button Name="btnDeleteUser" Click="btnDeleteUser_Click" Margin="650,116,0,255">Delete user</Button>
<ListBox Name="lbUsers" DisplayMemberPath="Name" BorderBrush="Black" BorderThickness="1 1 1 1" Height="192" Width="300" Margin="10,15,470,207" ></ListBox>
<TextBox x:Name="tbNom" HorizontalAlignment="Left" Margin="52,287,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="152" Height="25" FontSize="16"/>
<TextBlock x:Name="tbCopie" VerticalAlignment="Top" Width="202" Height="25" FontSize="16" Margin="289,282,289,0" Text="{Binding Path=users[1].Name}" />
<Label x:Name="lblCopie" BorderBrush="Black" BorderThickness="1 1 1 1" Content="{Binding Path=users[1].Name}" HorizontalAlignment="Left" Margin="273,339,0,0" VerticalAlignment="Top" Height="37" Width="140"/>
</Grid> |
Et là la partie Code Behind :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
namespace WpfTuto
{
/// <summary>
/// Logique d'interaction pour WinUpdateSource.xaml
/// </summary>
public partial class WinUpdateSource : Window
{
public class User : INotifyPropertyChanged
{
private string name;
public string Name
{
get { return this.name; }
set
{
if (this.name != value)
{
this.name = value;
this.NotifyPropertyChanged("Name");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
// private List<User> users = new List<User>();
private ObservableCollection<User> users = new ObservableCollection<User>();
public WinUpdateSource()
{
InitializeComponent();
users.Add(new User() { Name = "John Doe" });
users.Add(new User() { Name = "Jane Doe" });
tbCopie.Text = users[1].Name;
lblCopie.Content = users[1].Name;
lbUsers.ItemsSource = users;
}
private void btnAddUser_Click(object sender, RoutedEventArgs e)
{
users.Add(new User() { Name = tbNom.Text });
}
private void btnChangeUser_Click(object sender, RoutedEventArgs e)
{
if (lbUsers.SelectedItem != null)
(lbUsers.SelectedItem as User).Name = "Random Name";
}
private void btnDeleteUser_Click(object sender, RoutedEventArgs e)
{
if (lbUsers.SelectedItem != null)
users.Remove(lbUsers.SelectedItem as User);
}
}
} |
Merci d'avance pour votre aide.