Třída BindingBase se rozrostla o novou vlastnost Delay. Tato vlastnost nám umožní specifikovat čas (v ms) než dojde k aktualizaci zdroje. Ukázkové použití:

Máme formulář, kde jsou jednotlivé vlastnosti nabindované na TextBox, respektivě na jejich vlastnost Text. Jakmile uživatel píše do TextBoxu, hodnota se díky módu TwoWay propisuje automaticky do naši vlastnosti, kde provádíme nějakou akci (např. validace, apod.) Někdy je ovšem nepodstatné aby se tato kontrola prováděla při každém stisku klávesy a v tom případě můžeme nastavit Delay na pár sekund, které by teoreticky mohly stačit k vyplnění příslušné hodnoty a binding po uplynutí této doby aktualizuje zdroj a validace se provede 1x.

Poznámka: Pokud chcete používat Delay, musí být hodnota Mode=TwoWay a UpdateSourceTrigger=PropertyChanged

image

image

Ukázka z aplikace:

image

Po uplynutí 3s:

image

Závěr:

Při testování zadání hodnoty s mezerou např.": “sdf sdfs sdf sdfs sdf” to přestane ovšem fungovat a VS zahlásí chybu:

System.Windows.Data Error: 8 : Cannot save value from target back to source. BindingExpression:Path=Name; DataItem='DelayDataBinding' (Name='aaa'); target element is 'TextBox' (Name=''); target property is 'Text' (type 'String') ArgumentException:'System.ArgumentException: 'sdf sdfs sdf sdfs sdf' is not a valid value for property 'Name'.
   at System.Windows.DependencyObject.SetValueCommon(DependencyProperty dp, Object value, PropertyMetadata metadata, Boolean coerceWithDeferredReference, Boolean coerceWithCurrentValue, OperationType operationType, Boolean isInternal)
   at System.Windows.DependencyObject.SetValue(DependencyProperty dp, Object value)
   at MS.Internal.Data.PropertyPathWorker.SetValue(Object item, Object value)
   at MS.Internal.Data.ClrBindingWorker.UpdateValue(Object value)
   at System.Windows.Data.BindingExpression.UpdateSource(Object value)'

Vypadá to asi na nějaké bug.

Moje chyba, používal jsem název vlastnosti Name, který už ovšem existuje v rámci UserControlu.