2017-01-10 3 views
-5

Also ehrlich gesagt sehe ich keine Lösung dafür, weil es .Net's vermasselt ist, aber vielleicht haben andere dieses Verhalten gesehen und wissen einen besseren Workaround.C# DataBinding - Welchen Teil von "Nie" .Net nicht verstehen?

Ich wollte im Grunde eine Möglichkeit schaffen, Fenstereinstellungen zwischen den Ausführungen von Anwendungen zu erhalten, und so habe ich natürlich das System Einstellungen verwendet. Jetzt, tragischerweise, hat die WindowState kein Ereignis, das auslöst, wenn es sich ändert, also müssen wir ein wenig kreativ sein, wenn sich die ClientSize ändert, aber alles in allem nicht zu schwierig zu verfolgen. Doch beim Start gibt es ein einfaches Problem:

this.DataBindings.Add(
    new Binding(nameof(this.Location), 
    Properties.Settings.Default, 
    nameof(Properties.Settings.Default.MainLoc), 
    true, 
    DataSourceUpdateMode.Never) 
    { 
     ControlUpdateMode = ControlUpdateMode.Never 
    }); 
this.DataBindings.Add(
    new Binding(nameof(this.ClientSize), 
    Properties.Settings.Default, 
    nameof(Properties.Settings.Default.MainSize), 
    true, 
    DataSourceUpdateMode.Never) { 
     ControlUpdateMode = ControlUpdateMode.Never 
    }); 
this.DataBindings.Add(
    new Binding(nameof(this.WindowState), 
    Properties.Settings.Default, 
    nameof(Properties.Settings.Default.MainState), 
    true, 
    DataSourceUpdateMode.Never) { 
     ControlUpdateMode = ControlUpdateMode.Never 
    }); 

DataSourceUpdateMode.Never. HA. Was für ein Witz. Fügen Sie einen Haltepunkt bei diesem Code ein, und fügen Sie dann einen Haltepunkt in den Eigenschaften Properties.Settings.Default.Main der Klasse Settings ein. Jedes Mal, wenn ich diese Funktion ausführe, schreibe ich die Daten in den Moment, in dem ich diese Daten an die Datenquelle schreibe. Dabei ignoriere ich die Tatsache, dass ich diesen Bindungen ausdrücklich gesagt habe, die Datenquelle NIE zu aktualisieren. Das scheint ein extrem schlechtes Design zu sein.

Kennt jemand irgendeine Möglichkeit, eine Datenbindung wie folgt hinzuzufügen, wo es wirklich das Steuerelement oder die Datenquelle NIE aktualisiert, es sei denn, ich rufe speziell Binding.ReadValue oder an?

+0

Bindungsmodus = OneWay scheint effektiver zu sein oder UpdateSourceTrigger = Handbuch – BradleyDotNET

+0

Zustimmen gibt uns weniger Auswahl. Alternativ kann eine 'BindingSource' verwendet werden, die leistungsfähiger ist. Siehe die akzeptierte Antwort hier: http://stackoverflow.com/questions/4045921. Verwenden Sie den Aufruf bindingSource.SuspendBinding() 'vor dem Binden. Setzen Sie die Bindung später fort, wenn Sie die Daten benötigen. Keine Notwendigkeit von 'ReadValue' und' WriteValue'. – nawfal

+0

Bitte vandalisiere deine Beiträge nicht. Nachdem Sie eine Frage gestellt haben, haben Sie den Inhalt an die Stack Overflow-Community (unter der CC-by-SA-Lizenz) lizenziert. Wenn Sie diesen Beitrag von Ihrem Konto trennen möchten, lesen Sie [Was ist der richtige Weg für eine Deaktivierungsanfrage?] (Http://meta.stackoverflow.com/questions/323395/what-is-the-compare-route- für eine Dissoziationsanfrage). –

Antwort