Frage

Ich habe einfache Frage eine Zwei-Wege-Datenbindung einer Checkbox in Silverlight 3.0 Einstellung. Es muss ein Kinderspiel sein, aber wahrscheinlich habe ich vergessen, mein Gehirn zu Hause heute ...

I definiert eine Modellklasse meine .. ‚Daten‘ zu repräsentieren. Ich implementiert die INotifyPropertyChanged-Schnittstelle die Benutzeroberfläche zu sehen, wenn die Datenänderungen zu ermöglichen.

public class Model : INotifyPropertyChanged
{
    private bool _value;
    public bool Value
    {
        get { return this._value; }
        set
        {
            if (this.PropertyChanged != null)
                this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
            this._value = value;
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

setzen Next ich eine Checkbox und einen Knopf auf der .. 'Form':

    <StackPanel Orientation="Horizontal">
        <CheckBox x:Name="check" IsChecked="{Binding Value, Mode=TwoWay}" Content="SomeLabel"/>    
        <Button Click="Button_Click" Content="Test" />
    </StackPanel>

Dann geliefert ich die Daten im Konstruktor:

    public MainPage()
    {
        InitializeComponent();

        this.DataContext = new Model() { Value = true };
    }

Das Problem ist, dass Sie zweimal auf das Kontrollkästchen klicken müssen für sie zu aktivieren / deaktivieren, wenn ich die INotifyPropertyChanged de-umzusetzen. Wenn es jedoch de-implementieren, dann die UI nicht bemerkt, wenn ich die zugrunde liegenden Daten ändern.

Wenn ich die Mode = TwoWay aus dem Bit entfernen IsChecked Bindungsausdruck dann auch die UI wird die zugrunde liegende Datenänderung nicht bemerkt, auch wenn das Modell der Schnittstelle implementiert.

Wie kann ich tun, um:

  1. Haben Sie die auf die Daten beim Start gebunden Checkbox
  2. Haben Sie das Kontrollkästchen IsChecked Änderung der zugrunde liegenden Daten zu ändern
  3. Haben Sie das Kontrollkästchen der zugrunde liegenden Datenänderung erkennen und selbst aktualisieren?
War es hilfreich?

Lösung

Sie haben einen Sequenzierungsfehler in Ihrem Set-Eigenschaft Verfahren erhalten, müssen Sie assign zu _value vor Benachrichtigung der Änderung: -

    set
    {
        this._value = value;
        if (this.PropertyChanged != null)
            this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));

    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top