WPF Binding mit INotifyPropertyChanged nicht aktualisiert

Ich zu sein scheinen mit ernsthaften Problemen, immer meine WPF-Benutzeroberfläche zu aktualisieren, wenn ich update, wenn ich ein update der Immobilie gebunden ist. Hier ist meine Sicht der model-Klasse definition:

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);
            }
        }
    };
}

Diese gebunden ist meine einfache Benutzeroberfläche in den folgenden XAML-Code:

<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>

Die Anwendung ist definiert wie folgt:

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)
        {
        }
    }
}

Wenn die app startet, alles ist peachy, das label selbst zeigt zunächst, was Wert ist in der Count-Eigenschaft des Modells. Aufruf von Inkrement-updates das Modell richtig, und direkt Inkrementieren Sie die Count-Eigenschaft, wie gezeigt, in der der code funktioniert auch Prima.

Das problem hier ist, dass das PropertyChanged-Ereignishandler nie scheint Hinzugefügt. Ich kann Schritt für Schritt durch den code im debugger, und sehen den Wert in die Eigenschaft zu aktualisieren, und ich kann sehen, dass der Aufruf von OnPropertyChanged auch, aber das PropertyChanged-Ereignishandler selbst ist immer null.

Gibt es ein problem mit meiner Bindung vielleicht?

Ich bin mit MSVC 2010 Express.

Ihre IncButton_Click handler ist derzeit leer in deinem Beispiel; haben Sie sichergestellt, dass Sie anrufen Inkrement auf die AppModel in DataContext und nicht einige andere AppModel-Instanz?

InformationsquelleAutor Chris D. | 2010-06-18

Schreibe einen Kommentar