Me parece estar teniendo problemas serios conseguir mi WPF interfaz de usuario para actualizar cuando actualizo cuando actualice la propiedad que está obligado a. Este es mi punto de vista la clase del modelo:WPF Encuadernación con INotifyPropertyChanged no actualiza
namespace WpfModel
{
class AppModel : INotifyPropertyChanged
{
private int _count = 7;
public int Count { get { return _count; }
set { _count = value; OnPropertyChanged("Count"); } }
public void Increment()
{
Count++;
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string prop)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs("prop");
handler(this, e);
}
}
};
}
Esto se ve obligada a mi sencilla interfaz de usuario en el siguiente XAML:
<Window x:Class="WpfModel.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:WpfModel"
Title="WPF Data Model Demo" Height="128" Width="284" >
<Window.DataContext>
<vm:AppModel />
</Window.DataContext>
<Grid Height="Auto" Width="Auto">
<Button Margin="0,0,12,12" Name="IncButton" Height="23" VerticalAlignment="Bottom" HorizontalAlignment="Right" Width="75" Click="IncButton_Click" Content="Increment" />
<Label Content="Count Variable:" Height="28" HorizontalAlignment="Left" Margin="12,12,0,0" Name="label1" VerticalAlignment="Top" />
<Label Height="28" Margin="116,12,0,0" Name="CountLabel" VerticalAlignment="Top" HorizontalAlignment="Left" Width="40" Content="{Binding Path=Count}" />
</Grid>
</Window>
La aplicación se define como sigue:
namespace WpfModel
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private AppModel _model = new AppModel();
public MainWindow()
{
InitializeComponent();
//_model = new AppModel();
}
private void IncButton_Click(object sender, RoutedEventArgs e)
{
}
}
}
Cuando el la aplicación se inicia, todo es color de rosa, la etiqueta incluso muestra inicialmente cualquier valor que esté en la propiedad Count del modelo. El incremento de llamadas actualiza el modelo de manera adecuada y el incremento directo de la propiedad Count como se muestra en el código también funciona bien.
El problema aquí, es que el controlador de eventos PropertyChanged no parece que se añade a. Puedo recorrer el código en el depurador y ver el valor de la actualización propiedad, y puedo ver la llamada a OnPropertyChanged aún, pero el propio manejador PropertyChanged siempre es nula.
¿Hay un problema con mi vinculante tal vez?
estoy usando MSVC 2010 Express.
Su manejador IncButton_Click está actualmente vacía en su ejemplo; ¿se ha asegurado de llamar a Increment en AppModel en su DataContext y no en alguna otra instancia de AppModel? –