@@ -159,10 +159,8 @@ export class PickerField extends TextField implements TemplatedItemsView {
159
159
if ( selectedIndex !== undefined ) {
160
160
let object = this . getDataItem ( selectedIndex ) ;
161
161
this . selectedIndex = selectedIndex ;
162
- let value = this . getValueFromField ( "selectedValue" , this . valueField , object ) ;
163
- this . selectedValue = value === undefined ? object : value ;
164
162
165
- this . updatePickerText ( object ) ;
163
+ this . _updateSelectedValue ( object ) ;
166
164
}
167
165
168
166
this . disposeModalView ( ) ;
@@ -413,6 +411,11 @@ export class PickerField extends TextField implements TemplatedItemsView {
413
411
}
414
412
}
415
413
414
+ private _updateSelectedValue ( object : any ) {
415
+ let value = this . getValueFromField ( "selectedValue" , this . valueField , object ) ;
416
+ this . selectedValue = value === undefined ? object : value ;
417
+ }
418
+
416
419
private updatePickerText ( object : any ) {
417
420
let textValue = this . getValueFromField ( "text" , this . textField , object ) ;
418
421
textValue = textValue === undefined ? object : textValue ;
@@ -422,7 +425,55 @@ export class PickerField extends TextField implements TemplatedItemsView {
422
425
protected onModalAnimatedChanged ( oldValue : boolean , newValue : boolean ) { }
423
426
424
427
protected onSelectedValueChanged ( oldValue : any , newValue : any ) {
425
- this . text = newValue ;
428
+ if ( this . hasItem ( newValue ) ) {
429
+ this . updatePickerText ( newValue ) ;
430
+ return ;
431
+ }
432
+
433
+ let dataItem = this . getObjectFromValue ( this . valueField , newValue ) ;
434
+ if ( dataItem ) {
435
+ this . updatePickerText ( dataItem ) ;
436
+ } else {
437
+ this . text = newValue ;
438
+ }
439
+ }
440
+
441
+ private getObjectFromValue ( propertyName : string , value : any ) {
442
+ if ( ! propertyName ) {
443
+ return undefined ;
444
+ }
445
+
446
+ if ( this . items ) {
447
+ for ( let i = 0 ; i < this . items . length ; i ++ ) {
448
+ let item = this . _getDataItem ( i ) ;
449
+ if ( item . hasOwnProperty ( propertyName ) ) {
450
+ let dataItemValue = item [ propertyName ] ;
451
+ if ( dataItemValue === value ) {
452
+ return item ;
453
+ }
454
+ }
455
+ }
456
+ }
457
+
458
+ return undefined ;
459
+ }
460
+
461
+ private hasItem ( object : any ) {
462
+ if ( this . items ) {
463
+ for ( let i = 0 ; i < this . items . length ; i ++ ) {
464
+ let item = this . _getDataItem ( i ) ;
465
+ if ( item === object ) {
466
+ return true ;
467
+ }
468
+ }
469
+ }
470
+
471
+ return false ;
472
+ }
473
+
474
+ private _getDataItem ( index : number ) : any {
475
+ let thisItems = < ItemsSource > this . items ;
476
+ return thisItems . getItem ? thisItems . getItem ( index ) : thisItems [ index ] ;
426
477
}
427
478
428
479
protected onValueFieldChanged ( oldValue : string , newValue : string ) { }
0 commit comments