Part 11 ViewModel Designer Updates

ViewModelDesigner updates - what happens when you click widgets and columns. And a brand new addition "Rendered By" on actions. This opens up for a few new view patterns for you to take advantage of.

To make your experience more comfortable, we set the main tags mentioned in the video to the right bar menu of this mini player. Choose the interesting subtitle on the list and immediately get to the exact theme timeplace in the video. Now you can pick any topic to be instructed without watching the whole video.


Styles Winform rendering engine New edition interface improvements ViewModel grid
    • Show tab-order • Screen size marker • Suggested zoom
"The column SomeValue occupies the same space as SomeString" warning Actions in UI "Rendered by" on actions. Checkbox column

Raw subtitles text

hi and welcom, we're going to take a look at the

view model designer, there's a few updates and

also a bit of frustration we have had

through email and it's great that you

communicate what you think is strange

and so we can fix and do better

thank you very much for that, so

the view model editor looks like this

the first thing about the styles, here you

can actually add your own styles, if you

have done better, but I think there is two set along

default it's the bubbly and it's the

MDriven designer default and this is only

for your own pleasure, what you like, it

will remember what you have chose

and show that for all the view models you have in this particular model

so change that to whatever you think is appropriate for you and we have few

I've done a few other styles, there's not

that much difference to them, but we can

go with this one for now and it sort of

mimiks the winform preview pretty much

and this is how things would look where

if it would be rendered by the

winforms rendering engine that we also have

but we don't really recommend you

to use that one because it's old and we

don't attend to it as much as the wpf or the turnkey ones ok

so and a new addition is that the

highlighting of the columns here are

made a little different color, so that

you see them better and there's a

resizer here that makes it

possible to resize placed columns

we call these columns, viewmodel columns

we call these the view model and the

head of the view model and these are

nestings to the viewmodel, we have done a

few other things as when you click one

here this one is highlighted the

corresponding item is highlight, so it

will be easier for the eye to see

what it is that you clicked on and let's

make this bit smaller, so that you see if you were

to have it like this and you select

something out of screen it will now zoom or rather pen to the

correct item and this is also true vice versa

so if you have it like this

well it's hard to see now I guess if

this were to be scrolled, let's add some

things that's going to copy and paste

paste paste paste...like that and

described out of view and I'm gonna click this one

so then its scroll and select, so it will

be easier for you to to find it with the eye

ok, so what is it that happens when we

going to do ctrl+z here to remove this things

what it is it that happens when we move around fix

well the view model is just a grid it's

a logical grid and we place things like this

if we look at this we can see that

the column is 1, so this column1 and

the row is 0 this is row 0, if I were to

move it here, it would update to column 2

and then the span how many

columns it would expand, if I change this

to 2 it jumps, if I change it to 3, 4

like that and I could also grab it

by the handle, the resize handle in the

bottom here and change it that way

then it would go back, so we place a label in

front of all the placed widgets and

the label is just defaulted to this

the name and when we find this will try

to decount case what we have in the

name, but you can actually override this

and set something else I got

or you could write that manually

some date but the fastest way is to

just have it like the default and it

will decount case your name, if you

don't want to label at all, you can actually

remove this and it won't be rendered

you see, it's now not taking up any space

there so you could have something else

there without a collision, but if this

one were to have the name and you moved up

that one, it wouldn't look very good

it's not actually a collision, but it's crap, so avoid that

yeah, and at the very end here

we have an area which will extend it

if you drop on this it will extend

but you can't drop outside, so why is the

great desize is, well it takes the max

and the min of what you have placed

unless, you select the top level of your

model level and explicitly say that it

should be 10 columns and 10 rows

they would be that until something forces it

to be even bigger, like this, but these are usually set to zero and we

interpret that as set and sizing it to

to what you have placed ok and so in

this case the label takes up one column

but if I would like it to take up more

columns. I can do it like that, now it

takes up 2, now it takes up 3

there's really no to widget resize

thing to set this in the UI you need to change it here

we also have some few other things

show the gridlines I've talked about and the

show tab order it s in what order the

key navigation will try to use and we

can control this by changing the strategy

now its display order y before x but

maybe it should be the other way around

x before y or maybe it should be the

column design order, so if this one would

be at the very bottom and it would jump

around like this and I know we have a

some kind of bug here with the arrows

denoting how things are connected, but

we haven't got around to fix it, it's

just a rendering, ok, so to do this we

have the zoom in and zoom out and the

fit and nothing strange about that but

this thing screen size marker it

says 1920 x 1080 and what that control

is actually the size of the prototyper,

so when we started it comes up really big

but if I were to set this, this is a

global setting, so if I set it to 800 x 600

and start a prototyping it comes up a lot smaller, ok so

we have this suggested zoom

it's a variable that will be the value

that will be streamed along with the

other data of the view model and that we

have had used for it when the screens

are too big for this, so to avoid scroll

bars showing on the user's monitors, but

it's only implemented for wpf really

ok and we have the actions tab

which denotes how we can come here

and we can double-click them bring up

the actions dialogue like that and we

have seen that before and then also if

there is a view more action in here or

other navigating action it would show up

like a little icon, so when I click this

action view one thing I can see that it

brings up the viewmodel, view one thing

but I can just as well jump to it

straight here so this is actually a

great way to navigate around your application in design time

and of course you can opt out and opt-in

the actions as we have talked about before

so whenever you design and make things end up

on top of each other you will get

these warnings the column some value

occupies the same space at some string and

this you should never run like this

you should avoid it, this will also show when

you save and the model validation is run

as part of the save operation and it

will state that this is a problem

actually you should always make sure, that this is empty

never run with the things not sold here

it's really not supported it could

be any kind of the issue with your model

that will be probably problematic for the framework to deal with

so when things end up on top of each other

there's actually no super good way to

know which one you click you just have

to move them around to see if this is

what you want or maybe that is what you want

the view model editor has been

stable for quite a while which is good

it sort of tells us that it is doing

what it should and we haven't had a lot

of need to change it, but we had this

idea that we think is truly generic and

it's the ability to tie an  action to

another widget in the UI, so if you

remember we could of course add a an

action column, which really only is a button like this and yeah

this might be good to mention here

whenever we add something, the default

position will be the last position you had plus one row, so if I add

another thing, it would end up under the

the one I just placed, so this is practical

and so if you're going to add a lot of

things over here make sure that you

change it there first and then add the

rest, they will end up under it like that

right, but what I was saying was

that the action column MyAction

that's just an ordinary column with the

"is action" checkbox checked, so if I were

to take that away it would render like a

text box, but I wanted as an action and

here's a few new things of course, when

it is an action you might enter the

expression here and then it's an action editor or EA language which is

allowed to have side effects wouldn't be

much fun action if it didn't, but you can

also hook it to a existing viewmodel action

that you have designed here

so that makes it possible for you to

navigate from a button for example or do

framework actions and things that's are

only available in the actions defined here

yep, but what I was speaking about was

the ability to tie an action to another placed widget

so another thing, we have designed this for

let's try to check that was the one

I fixed, so I'm going to add an

attribute. so that we could show an image

because images, is so I have this image

attribute, let's call it image and make

the type a blob

oops, blob and whenever I have a blob

I can set the blog type to help the

rendering engine and say it's an image

and that means that I now have a new

column to add here that's the image

and it ended up here because this was

the one I did last and it just adds the

same height and everything but

I might wanted like this not like that and there

may be like that, so, what I really would like to do, now is to

make this image clickable, that's a common

use case I want the image, but I wanted

I want someone to be able to

click the image in and do something so

but I have my action and this is where I can do things

let's say that my action takes the, well

what should we do take the some string

attribute and depends, like that

and here's my image, so let's just run

this and see what it does the plate and

view all things, create a thing and

save it, have it for later and if I were to click my action it

would makes like that and if I were

to pick my pick my image, I guess I could

go like that have an image and if I were

to click this is nothing what happened

because it's just an image, right yeah

so that's what is cool with this new

feature is that I could point on the

image or rather pointed the action

and on the action row it says rendered by

so here I can say that it's the image

that will render my a action and not

myself and what happens then if I choose

this is that the button shouldn't have a

visual representation, it shouldn't be

available anymore and it disappears and

now it's backed by the image instead, so

that would mean if I refresh is and

bring up the same thing again the button

isn't there, but I can double click the

image and things will happen here, so

and this is the new feature that we have

added to, today I added it to wpf and I

will continue to add it to the turnkey

rendering engines as well, so there's

this possibilities also implemented for

things that have, that are static added

boxes stutic labels like this some

string and then I can say that the

action that I have here is actually

rendered by my attribute on my column

called some stream and then it shows up as

hyper link thing and that would

be the same as if I do a refresh and we

navigate back, if I click it would execute

the action and it added an x but

this one doesn't have the action,, so if I

want both I need to add two actions and

say that the what columns stay back

so, this feature also enables us to

do a thing that we have been thinking

about for a while, you know

when you have a grid with the lots of

things and maybe you want to select a few

things of the grid the standard pattern

has been to add another grid with a

couple of action seem in between showing

arrows I want to pick these I want to

remove these from the picked, but much more

compact way of doing it would be to have

a checkbox column you have here that you just

could check to get things and this

renered by action is actually one way to solve it

so if I save this I can just set some

values here so we see that they are different

and if I were to add new generic column here and say that

well actually I need to have something

in my model, so that I can choose many

details let's just add another link and

call that one picked details, like that and

press ctrl+L to make it squared and

whenever I press ctrl L there it will

remain square when I move it around

ok, so just to prove the point I'm going

to add the nested viewmodel multilinks

and grab this one picked details, I know it

was out of screen, I think you get it by

now I'm going to show the attribute one and delete

that column and now it collides with

things move that up here maybe, like so and what about a compact

way to move this one up by dragging it

now its first and I say, call this picked and now

I should get the expression to denote if

it is picked or not, so self and

I'm in the context of a detail remember

the model of detail that is owned by of

thing, so navigate up the thing and says

pick details and pics of self

if this is bigger than -1 then it

actually is a picked, so I guess that could

be my expression, because if I'm not bigger than -1, it will be false

and I will be yeah and I'm not picked

so that could be the expression and

running that would look like this and of

course it's a read-only expression

because it is index off and

it doesn't set anything, change anything

in my model, but what I want to do is

when I click this I wanted to be

selected, so what we can do is to

in the grid add a new column and I'm

going to say it's prepared for action

so it's an action column

this is rather new we haven't allowed

column actions in the grid before and

we still actually more or less done

because it's unclear what they should do

but in this case it's clear, we want this

column, this action to be rendered by the picked column

so whenever you click the picked it should

actually just ignore what it is in this case checkbox and just

execute the action, we are still in the context of a detail

and we navigate up to thing and we

see the selected, picked details, so if

the details is index of self, so its bigger

than -1, than so what we're saying

if we already are pick then we should

actually remove ourselfs we want

to toggle this, so when you check it

it should be picked and when you uncheck it

it should be and removed, when you want to add ourselves to this

association and then we are endif like that

so having done that, we should

re-fresh now when I click the action is

execute and it will render here as a

consequence and if I check it again

click it again it will execute the

action one more time and I see that I'm

already selected and then unselected and

the checkbox is actually just signaling

this state, so this is cool because that

means I don't actually need this grid

to solve the whole problem of picking

few things and of course saving this and

going back and going into it again it

will be correct and even if I had

another way to change which ones are

picked it would be derived to have

the correct view here, pretty cool

so that is what you can do with the new

thing called rendered by, an action can

be rendered by something else

This page was edited 75 days ago on 02/10/2024. What links here