Skip to content

Basic support for DataContext={resource: ...}#1392

Merged
tomasherceg merged 17 commits intomainfrom
resource-datacontext
Mar 16, 2025
Merged

Basic support for DataContext={resource: ...}#1392
tomasherceg merged 17 commits intomainfrom
resource-datacontext

Conversation

@exyi
Copy link
Copy Markdown
Member

@exyi exyi commented May 21, 2022

This functionality allows server-only rendering - i.e. building static HTML based on viewmodel which is not necessarily sent to the client.

The design is fairly simple - we allow resource binding
in data context and track that this data context does
not exist client-side (see the new ServerSideOnly property).
Using this server-only data context is not allowed in value
and staticCommand bindings. Note that using a value binding
inside the resource-bound control is allowed, it just cannot
reference _this. Since the context does not exist client-side,
we then translate _parent into $data instead of $parent.

Repeater, GridView and HierarchyRepeater should all support this.

@exyi exyi force-pushed the resource-datacontext branch 2 times, most recently from bcdd52d to e885da2 Compare May 25, 2022 18:23
@exyi exyi mentioned this pull request May 25, 2022
@exyi exyi force-pushed the resource-datacontext branch from d99fb15 to dca0a1b Compare August 2, 2022 18:08
@exyi exyi marked this pull request as ready for review August 2, 2022 21:25
@exyi exyi requested a review from a team August 2, 2022 21:25
@exyi exyi force-pushed the resource-datacontext branch from a9193f7 to 2fa5063 Compare August 3, 2022 14:31
@exyi exyi force-pushed the resource-datacontext branch 2 times, most recently from efbaf1e to 3ee2344 Compare September 11, 2022 21:32
@exyi exyi force-pushed the resource-datacontext branch from 3ee2344 to 14a7721 Compare September 14, 2022 10:37
exyi added a commit that referenced this pull request Dec 7, 2022
problem was that that BindingHelper.FindDataContextTarget
assumed there was one more data context layer since we used set
data context type and DataContext on different controls.
Because of that command client-side and server-side
data context paths didn't match.
Technically, this is a glitch of BindingHelper, not HierarchyRepeater,
but "fixing" BindingHelper will break many things and it's hopefully
going to be done in #1392
exyi added a commit that referenced this pull request Dec 7, 2022
problem was that that BindingHelper.FindDataContextTarget
assumed there was one more data context layer since we used set
data context type and DataContext on different controls.
Because of that command client-side and server-side
data context paths didn't match.
Technically, this is a glitch of BindingHelper, not HierarchyRepeater,
but "fixing" BindingHelper will break many things and it's hopefully
going to be done in #1392
exyi added a commit that referenced this pull request Dec 21, 2022
problem was that that BindingHelper.FindDataContextTarget
assumed there was one more data context layer since we used set
data context type and DataContext on different controls.
Because of that command client-side and server-side
data context paths didn't match.
Technically, this is a glitch of BindingHelper, not HierarchyRepeater,
but "fixing" BindingHelper will break many things and it's hopefully
going to be done in #1392
@exyi exyi added this to the Version 5.0 milestone Jan 4, 2023
exyi added a commit that referenced this pull request Jan 4, 2023
Part is taken from #1392 which won't be merged for a while.
exyi added a commit that referenced this pull request Feb 1, 2023
Part is taken from #1392 which won't be merged for a while.
@exyi exyi force-pushed the resource-datacontext branch from 14a7721 to dd7cf40 Compare February 25, 2024 16:15
@exyi exyi force-pushed the resource-datacontext branch 2 times, most recently from 88d7168 to 3019446 Compare November 24, 2024 15:40
@exyi exyi force-pushed the resource-datacontext branch from e7708ec to 10002de Compare December 1, 2024 15:58
@exyi exyi force-pushed the resource-datacontext branch from 051a7ad to a9b9783 Compare February 8, 2025 10:51
exyi added 7 commits February 8, 2025 15:16
This functionality is essential for server-side
only rendering, but this patch is only the groundwork -
we still need to add support to Repeater and possibly other controls.

The design is fairly simple - we allow resource binding
in data context and track that this data context does
not exist client-side (see the new ServerSideOnly property).
Using this server-only data context is not allowed in value
and staticCommand bindings. Note that using a value binding
inside the resource-bound control is allowed, it just cannot
reference `_this`. Since the context does not exist client-side,
we then translate _parent into $data instead of $parent.
@exyi exyi force-pushed the resource-datacontext branch 2 times, most recently from 630c5b9 to bc1e371 Compare February 8, 2025 14:20
exyi added 7 commits February 8, 2025 16:07
* ExpectedType property can now be null, when the assigned property is unknwon:
   - this means that CreateBinding will actually create a strongly
     typed instance, instead of just ValueBindingExpression<object> or similar
* AutoUI uses props.Property instead of CreateValueBinding where possible
…property

This avoids being too sensitive to the DataContextType property,
which is often set incorrectly in our libraries (to hack around
other issues, so not easily fixed). We therefore switch
the IsServerSideOnly check to another dedicated property
which needs to be set by Repeater and similar controls.
This means that DataContext=resource compatibility will
need some non-obvious hack, but code which doesn't do that
will not be affected by the update to v5 in any way.
Some controls now need to allow resource bindings,
but not hardcoded values (i.e. grid columns)
@exyi exyi force-pushed the resource-datacontext branch from bc1e371 to 27ae8e1 Compare February 8, 2025 15:07
@tomasherceg tomasherceg merged commit d3e88d5 into main Mar 16, 2025
14 of 16 checks passed
@tomasherceg tomasherceg deleted the resource-datacontext branch March 16, 2025 10:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants