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);
}
}
}