public void BindView (View view, object dataSource = null)
        {
            if (view == null)
                return;
            var isRoot = view == RootView;
            IList<WeakReference> lingeringTags = null;

            if (dataSource != null) {
                view.UpdateDataSource(dataSource);
            }

            if (isRoot) {
                lingeringTags = new List<WeakReference>(_viewTags);
                _viewTags.Clear();
            }

            if (dataSource == null) {
                dataSource = FindParentDataSource(view.Parent);
            }

            BindViewTree (dataSource, view, lingeringTags);

            if (isRoot) {
                ClearBoundTags(lingeringTags);
            }
        }