Pourquoi ne OnPropertyChanged pas de travail dans le Code Derrière?
Je vais essayer de simplifier un peu de code en mettant le ViewModel modèles dans le code-behind et de liaison du DataContext "ce", mais il semble fonctionner différemment, dans l'exemple suivant:
Pourquoi est-il lorsque le bouton est cliqué, le TextBlock lié à "Message" ne pas changer, même si OnPropertyChanged("Message") est appelée?
XAML:
<Window x:Class="TestSimple223.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel HorizontalAlignment="Left">
<Button Content="Button"
Click="button1_Click" />
<TextBlock
Text="{Binding Path=Message, Mode=TwoWay}"/>
<TextBlock
x:Name="Message2"/>
</StackPanel>
</Window>
Code Derrière:
using System.Windows;
using System.ComponentModel;
namespace TestSimple223
{
public partial class Window1 : Window
{
#region ViewModelProperty: Message
private string _message;
public string Message
{
get
{
return _message;
}
set
{
_message = value;
OnPropertyChanged("Message");
}
}
#endregion
public Window1()
{
InitializeComponent();
DataContext = this;
Message = "original message";
Message2.Text = "original message2";
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Message = "button was clicked, message changed";
Message2.Text = "button was click, message2 changed";
}
#region INotify
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}
OriginalL'auteur Edward Tanguay | 2009-10-29
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas marqué votre classe comme étant disponible à la notification de modification de propriété. Changer le titre de la
Juste parce que vous mettre en œuvre les méthodes ne veut pas dire que WPF sait qu'une classe prend en charge la notification de changement - vous besoin de lui dire en le marquant avec INotifyPropertyChanged. De cette façon, le mécanisme de liaison permettent d'identifier votre classe comme l'un des potentiels de mise à jour de la cible.
OriginalL'auteur Pete OHanlon