45 votes

Pourquoi la liaison est-elle mise à jour sans implémenter INotifyPropertyChanged ?

J'ai créé un ViewModel et lié sa propriété à deux zones de texte sur l'interface utilisateur. La valeur de l'autre zone de texte change lorsque je modifie la valeur de first et que je me concentre hors de la zone de texte, mais je n'implémente pas INotifyPropertyChanged. Comment ça marche ?

Voici XAML

 <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <local:ViewModel />
    </Window.DataContext>
    <StackPanel>
        <TextBox Text="{Binding Name}" />
        <TextBox Text="{Binding Name}" />
    </StackPanel>
</Window>

Et voici mon ViewModel

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

2voto

Viet Norm Points 93

Je viens de découvrir que cela fonctionne également dans WinForms, un peu :/

 public class Test
{
    public bool IsEnabled { get; set; }
}

var test = new Test();
var btn = new Button { Enabled = false, Text = "Button" };
var binding = new Binding("Enabled", test, "IsEnabled");
btn.DataBindings.Add(binding);
var frm = new Form();
frm.Controls.Add(btn);
test.IsEnabled = true;
Application.Run(frm);

Curieusement, cela ne désactive pas le bouton :

 btn.Enabled = false;

Cela fait :

 test.IsEnabled = false;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X