diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj index ed69cbede..9a47ba9ed 100644 --- a/CrossPlatformModules.csproj +++ b/CrossPlatformModules.csproj @@ -166,7 +166,7 @@ - + @@ -920,7 +920,7 @@ - + diff --git a/apps/tests/ui/bindable-tests.ts b/apps/tests/ui/bindable-tests.ts index f8f394598..cec48c3c7 100644 --- a/apps/tests/ui/bindable-tests.ts +++ b/apps/tests/ui/bindable-tests.ts @@ -14,9 +14,6 @@ import labelModule = require("ui/label"); import textFieldModule = require("ui/text-field"); import fs = require("file-system"); import appModule = require("application"); -import repeaterModule = require("ui/repeater"); -import gestureModule = require("ui/gestures"); -import layoutBaseModule = require("ui/layouts/layout-base"); // // For information and examples how to use bindings please refer to special [**Data binding**](../../../../bindings.md) topic. @@ -531,30 +528,6 @@ export var test_BindingContext_NavigatingForwardAndBack = function () { helper.navigateToModuleAndRunTest(("." + moduleName + "/bindingContext_testPage1"), null, testFunc); } -export var test_RepeaterItemsGestureBindings = function () { - var testFunc = function (page: pageModule.Page) { - var repeater = (page.getViewById("repeater")); - var hasObservers = false; - var eachChildCallback = function (childItem: viewModule.View) { - if (childItem instanceof labelModule.Label) { - var gestureObservers = childItem.getGestureObservers(gestureModule.GestureTypes.tap); - hasObservers = gestureObservers ? gestureObservers.length > 0 : false; - } - else if (childItem instanceof layoutBaseModule.LayoutBase) { - childItem._eachChildView(eachChildCallback); - } - return true; - } - - repeater._eachChildView(eachChildCallback); - - TKUnit.assertEqual(hasObservers, true, "Every item should have tap observer!"); - } - - var moduleName = __dirname.substr(fs.knownFolders.currentApp().path.length); - helper.navigateToModuleAndRunTest(("." + moduleName + "/repeaterItems-bindingToGestures"), null, testFunc); -} - export var test_BindingToSource_FailsAfterBindingContextChange = function () { var createLabel = function () { var label = new labelModule.Label(); diff --git a/apps/tests/ui/repeater/repeater-tests.ts b/apps/tests/ui/repeater/repeater-tests.ts index 57c8ba75a..b7de64bab 100644 --- a/apps/tests/ui/repeater/repeater-tests.ts +++ b/apps/tests/ui/repeater/repeater-tests.ts @@ -3,6 +3,10 @@ import app = require("application"); import helper = require("../helper"); import viewModule = require("ui/core/view"); import stackLayoutModule = require("ui/layouts/stack-layout"); +import layoutBaseModule = require("ui/layouts/layout-base"); +import fs = require("file-system"); +import pageModule = require("ui/page"); +import gestureModule = require("ui/gestures"); //  // # Repeater @@ -378,6 +382,58 @@ export function test_BindingRepeaterToASimpleArrayWithExpression() { helper.buildUIAndRunTest(repeater, testAction); } + +export var test_RepeaterItemsGestureBindings = function () { + var testFunc = function (page: pageModule.Page) { + var repeater = (page.getViewById("repeater")); + var hasObservers = false; + var eachChildCallback = function (childItem: viewModule.View) { + if (childItem instanceof labelModule.Label) { + var gestureObservers = childItem.getGestureObservers(gestureModule.GestureTypes.tap); + hasObservers = gestureObservers ? gestureObservers.length > 0 : false; + } + else if (childItem instanceof layoutBaseModule.LayoutBase) { + childItem._eachChildView(eachChildCallback); + } + return true; + } + + repeater._eachChildView(eachChildCallback); + + TKUnit.assertEqual(hasObservers, true, "Every item should have tap observer!"); + } + + var moduleName = __dirname.substr(fs.knownFolders.currentApp().path.length); + helper.navigateToModuleAndRunTest(("." + moduleName + "/repeaterItems-bindingToGestures"), null, testFunc); +} + +export var test_RepeaterItemsParentBindingsShouldWork = function () { + var testFunc = function (page: pageModule.Page) { + var repeater = (page.getViewById("repeater")); + var expectedText = page.bindingContext["parentViewProperty"]; + var testPass = false; + var eachChildCallback = function (childItem: viewModule.View) { + if (childItem instanceof labelModule.Label) { + testPass = (childItem).text === expectedText; + if (testPass === false) { + return false; + } + } + else if (childItem instanceof layoutBaseModule.LayoutBase) { + childItem._eachChildView(eachChildCallback); + } + return true; + } + + repeater._eachChildView(eachChildCallback); + + TKUnit.assertEqual(testPass, true, "Every item should have text bound to Page binding context!"); + } + + var moduleName = __dirname.substr(fs.knownFolders.currentApp().path.length); + helper.navigateToModuleAndRunTest(("." + moduleName + "/repeaterItems-bindingToGestures"), null, testFunc); +} + /* export function test_no_memory_leak_when_items_is_regular_array() { var createFunc = function (): repeaterModule.Repeater { diff --git a/apps/tests/ui/repeaterItems-bindingToGestures.ts b/apps/tests/ui/repeater/repeaterItems-bindingToGestures.ts similarity index 85% rename from apps/tests/ui/repeaterItems-bindingToGestures.ts rename to apps/tests/ui/repeater/repeaterItems-bindingToGestures.ts index 61f1cf3aa..28d51ee14 100644 --- a/apps/tests/ui/repeaterItems-bindingToGestures.ts +++ b/apps/tests/ui/repeater/repeaterItems-bindingToGestures.ts @@ -4,7 +4,8 @@ items: [ { text: "1", tapItem: function () { console.log("1") } }, { text: "2", tapItem: function () { console.log("2") } } - ] + ], + parentViewProperty: "Parent View Property" }; } exports.pageLoaded = pageLoaded; diff --git a/apps/tests/ui/repeaterItems-bindingToGestures.xml b/apps/tests/ui/repeater/repeaterItems-bindingToGestures.xml similarity index 72% rename from apps/tests/ui/repeaterItems-bindingToGestures.xml rename to apps/tests/ui/repeater/repeaterItems-bindingToGestures.xml index 12b04ea7e..addde5ae1 100644 --- a/apps/tests/ui/repeaterItems-bindingToGestures.xml +++ b/apps/tests/ui/repeater/repeaterItems-bindingToGestures.xml @@ -2,7 +2,7 @@ - diff --git a/ui/repeater/repeater.ts b/ui/repeater/repeater.ts index 6600d7868..a40540421 100644 --- a/ui/repeater/repeater.ts +++ b/ui/repeater/repeater.ts @@ -149,8 +149,8 @@ export class Repeater extends viewModule.CustomLayoutView implements definition. for (i = 0; i < this.items.length; i++) { var viewToAdd = !types.isNullOrUndefined(this.itemTemplate) ? builder.parse(this.itemTemplate, this) : this._getDefaultItemContent(i); if (!types.isNullOrUndefined(viewToAdd)) { - viewToAdd.bindingContext = this._getDataItem(i); this.itemsLayout.addChild(viewToAdd); + viewToAdd.bindingContext = this._getDataItem(i); } } }