Sé que estoy haciendo algo mal aquí pero qué. Por favor, eche un vistazo y señale mi error.INotifyPropertyChanged.PropertyChanged always NULL
Veré "Peter" en mi cuadro de texto pero no "Jack" después de hacer clic en el botón.
Mi clase
namespace App
{
class Person : INotifyPropertyChanged
{
private string name;
public String Name
{
get { return name; }
set { name = value; OnPropertyChanged("Name"); }
}
public Person()
{
Name = "Peter";
}
public void SetName(string newname)
{
Name = newname;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string prop)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
}
}
Mi XAML
<Window x:Class="test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:app="clr-namespace:App"
Title="MainWindow" Height="400" Width="400">
<Grid>
<Grid.Resources>
<app:Person x:Key="person"/>
</Grid.Resources>
<TextBox Width="100" Height="26" Text="{Binding Source={StaticResource person}, Path=Name, Mode=TwoWay}" />
<Button Content="Button" Height="23" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>
Y mi código subyacente
public partial class MainWindow : Window
{
Person person;
public MainWindow()
{
InitializeComponent();
person = new Person();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
person.SetName("Jack");
}
}
Gracias.
hay dos Persona (s). TextBox vinculado a los recursos de Person from Grid, mientras que Button establece el Nombre de Persona del campo privado. Creo que deberías usar una Persona como DataContext de la Ventana. Esto aclarará su código y marcado. –
Es posible que desee leer [esto] (http://msdn.microsoft.com/en-us/library/ms752347.aspx) y [este] (http://msdn.microsoft.com/en-us/library /ms750613.aspx), ya que tienes algunas confusiones en tus enlaces y recursos. –