►
From YouTube: .NET Conf Philippines (2021-01-14)
Description
With the launch of .NET 5, we've got a ton of great tech in .NET to explore and catch up on! Join the Philippine .NET Users Group as it welcomes the new year with its first virtual event for 2021.
Speakers and topics will be announced later.
If you haven't done so please follow us on our social media accounts:
https://twitter.com/phinug
https://fb.com/groups/phinug
B
All
right
good
evening,
everyone
and
good
evening,
manila
and
and
everybody
who
is
here
welcome
to
the.netcon
philippines,
for
this
is
supposed
to
be
2020,
but
it's
already
it's
already
2021
and
we're
just
we're
just
happy
that
it
that
we
could
have
this.netcon
event,
I'm
john
I'm,
the
I'm,
the
ug
lead
or
the
user
group
lead
for
the
philippine.net
users
group
or
phoenix,
and
I'm
also
a
a
principal
developer
at
organization
called
paint
shop.
B
So
yeah,
thank
you
for
thank
you
for
everyone
being
here.
I
hope
you
have
a
good
evening.
I
hope
you're
enjoying
you've
enjoyed
or
you're,
enjoying
your
dinner
and
and
and
we're
up
for
you
know
a
couple
of
hours
of
great.
You
know
great
topics
that
we
have.
We
have
two
very
special
speakers
lined
up.
B
B
I
hope
that
that
you're
able
to
learn
a
lot
okay,
so
tonight,
our
first
our
first
speaker,
he
very
special
guest
that
that
we
have
so
so
he's
the
chief
technical
officer
cto
for
for
magenic,
which
is
a
a
you
know,
a
software
also,
the
company
that
also
has
offices
in
in
the
philippines
he's
a
microsoft
regional
director
and
is
the
author
of
the
csla.net
open
source
project?
It's
you
know.
You
know.
B
I've
always
wanted
him
to
be
able
to
talk
to
phoenix.
It's
an
honor
to
have
him
here
to
talk
about
to
talk
about
blazer.
Please
welcome
mr
rocky
lotka.
C
Hello,
everyone
good
evening:
it's
it's
a
pleasure
to
speak
to
everybody
and
I'm
just
really
happy
to
have
this
opportunity
appreciate
the
introduction.
John.
That's
that's
fantastic
and
I
won't
rehash
too
much
of
that
at
all
I'll,
just
kind
of
jump
right
in
here
and
talk
about
blazer
and
web
assembly,
which
I
I
think
are
two
of
the
most
exciting
technologies
right
up
there
with
containers,
docker
and
kubernetes
on
the
server
side.
C
I
I
have
this
vision
actually
that
a
lot
of
the
dotnet
development
that
happens
over
the
next
several
years
will
an
awful
lot
of
it
will
be
running
on
linux
containers
in
the
on
the
server,
whether
that
you
know
those
containers
might
run
in
azure
or
aws
or
kubernetes,
or
some
combination
of
the
above
and
all
of
the
client-side
software.
C
B
C
So
in
the
world
before
web
assembly
so-
and
I
think
it's
important
to
understand
that
web
assembly
now
has
been
built
into
all
modern
evergreen
browsers
for
about
two
years.
So
it's
relatively
new,
but
it
is
widely
available.
C
You
know,
type
typescript
itself
never
runs
in
a
browser.
Typescript
gets
converted
into
javascript
and
then
the
javascript
runs
in
the
browser
and
that's
true
for
everything
prior
to
web
assembly.
And
so
then
you
have
a
server
somewhere
and
from
the
server
you
deploy
the
web
application
right.
You
deploy
the
html
in
css,
you
deploy
the
javascript
code
and
then
any
sort
of
images
and
data
get
downloaded
and
what
has
become
the
kind
of
default.
C
Is
that
that
javascript
encode
you
either
write
your
application
using
something
like
angular
or
something
like
react,
and
then
I
know,
there's
a
whole
a
lot
of
other
javascript
frameworks,
but
the
you
know
the
two
big
ones
for
some
years
now
have
been
angular
and
react,
and
so
yeah,
that's
that's
the
world
that
has
been,
and
so
the
I
guess
you
could
argue.
The
good
side
to
this
is
that
your
only
option
is
javascript
right,
yeah.
C
You
don't
really
have
to
stop
and
think
about
what
programming
language
you
want
to
use
to
build
your
web
applications,
because
there
is
only
one
the
the
downside.
The
drawback
is,
of
course,
that
there
is
only
one
and
the
you
know.
I
have
a
hard
time
thinking
about
javascript
as
the
best
programming
language
that
humanity
can
create.
C
Yeah
like.
Is
it
really
the
the
best
thing
that
we've
ever
created
and
ever
will
in
the
future?
I
hope
not
so
web
assembly.
C
Is
this
idea
that,
and
it's
not
a
new
idea,
I
used
to
give
presentations
yeah?
Well,
I've
been
a
public
speaker
for
a
very
long
time
and
back
in
1999
2000
2001.
C
C
Should
the
browser
be
extremely
dumb
or
should
the
browser
become
the
new
client
side?
Runtime
basically,
should
we
should
we
stop
caring
about
windows
or
mac,
os
or
android
or
ios,
and
and
only
care
about
the
browser?
C
C
So
that
was
a
big
discussion
and
it
did
not
get
resolved
until
you
know
maybe
10
years
ago,
when
we
all
started.
Basically,
writing
almost
every
business
application
now
is
written
in
angular
or
react,
and
so
we
we
clearly
have
decided
that
the
client
runtime
is
a
modern
browser.
C
Now,
look
like
the
picture
that
you
are
seeing
on
the
screen
where
the
what
the
user
sees
is
created
using
html
and
css
and,
of
course,
browsers
still
do
javascript
like
they
always
have,
but
now
browsers
can
also
run
any
software.
That's
been
compiled
into
webassembly
and
so
from
the
server
you
can
download
your
html,
your
css,
your
javascript
images
data
and
also
pre-compiled
binary
code.
C
There
are
no
no
arrows
between
web
assembly
and
html
css
and
that's
a
current
limitation
of
the
way
web
assembly
works
and
so
right
now
the
only
language
that
can
interact
with
the
browser's
document,
object,
model
or
dom
is
javascript,
and
so
your
web
assembly
code
you,
you
can
write
code
in
javascript
that
calls
a
function
written
in
c
plus,
for
example,
but
it's
also
possible
for
your
code,
written
in
webassembly,
like
code
written
in
c
plus
to
call
javascript
and
then
the
javascript
can
update
the
dom
and
so
that's
kind
of
the
well.
C
It
is
the
the
model
that
everyone
is
currently
using
when
they're
writing
ui
frameworks
using
other
programming
languages
that
run
in
web
assembly.
C
Now
in
the
future,
the
webassembly
roadmap
includes
the
idea
of
having
webassembly
code
directly
interact
with
the
dom,
and
that
will
be
an
important
improvement
because
it
will
allow
a
lot
of
the
existing
ui
frameworks
that
have
been
written
in
programming
languages
like
c
sharp
or
go
or
rust.
C
C
Webassembly,
so
why
is
this
important
and-
and
I
think
it's
important
on
several
different
levels-
one
is
that
I
don't
think
it's
ever
healthy
to
have
a
mainstream
programming
platform
that
only
supports
one
programming,
language
that
that
reduces
innovation
and
and
innovation
and
competition
is
good
for
all
of
us,
because
it
forces
things
to
move
forward
at
a
good
and
healthy
pace
and
so
having
competition
between
javascript
and
c
and
c,
plus,
plus
and
rust,
and
go
and
c-sharp.
C
It's
also
the
case
that
web
assembly
code
can
run
substantially
faster
than
javascript
javascript
over
the
last
many
years
has
become,
you
know,
quite
good
at
being
just
in
time
compiled
and
there's
a
whole
lot
of
optimizations
that
have
happened,
but
if
you
have
a
complex
algorithm
that
is
written
in
c
or
c,
plus,
plus
or
something
like
that
and
compiled
with
an
optimizing
compiler
which
you
know
all
all
modern
compilers
are,
are
optimizing
they're,
very,
very
good,
and
then
that
code
is
compiled
into
webassembly,
then
that
code
is
almost
certainly
going
to
be
more
efficient
when
running
on
the
client
than
any
javascript
code.
C
You
know
algorithm
that
needs
to
run
you're,
probably
going
to
be
able
to
make
it
go
faster
by
writing
that
algorithm
in
some
sort
of
language
like
c,
plus
or
or
rust
and
compiling
it
into
webassembly,
and
so
even
if
your
entire
application
is
still
written,
mostly
in
javascript
writing
some
parts
of
it
in
a
more
optimized
language
might
give
you
performance.
C
Benefits
so
all
of
that
is
is
pretty
exciting.
I
think-
and
you
know
the
web
assembly
yeah
webassembly-
and
I
should
be
careful
to
here
too,
because
webassembly
is
not
a
microsoft
thing.
Web
assembly,
it's
started
with
firefox
and
the
mozilla
foundation
and
they
brought
in
other
companies
like
microsoft
and
google
ibm
and
over
time,
and
obviously
apple
to
get
safari
and
webkit,
and
so
webassembly
itself
is
a
wc3
standard.
That's
built
into
all
of
the
browsers.
C
As
you
might
know,
for
many
many
years
in
addition
to
net,
there
has
been
an
open
source
project
called
mono
or
mono
right
means
monkey,
but
mono
has,
for
a
very
long
time
been
an
open
source
project
that
has
reimplemented.net
in
on
its
own
and
when
microsoft
acquired
xamarin
a
few
years
ago,
they
become,
they
became
the
patron
for
the
the
mono
open
source
project.
C
C
Natively,
and
so
they
sketched
together
this
prototype
that
where
mono
would
compile
into
webassembly
and
and
they
worked,
it
was
pretty
awesome
right
and
so
then,
once
they
had.net
running
in
the
browser,
then
you
know
some
folks
at
microsoft,
looked
at
that
and
went
oh,
we
could
create
a
ui
framework
using.net
that
would
run
in
the
browser
and
that's
what
blazer
ultimately
is
today.
C
C
Now
today,
in.net
5
blazer
is
a
supported
part
of
net
and
actually
blazer.
It
was
supported
as
part
of
net
in
net
core
3.1
also
and
it
basically,
what
it
does
is,
is
if
you've
ever
built
a
server
side.
Asp.Net
application,
you
probably
have
used
razer
syntax,
that's
what
asp.net
mvc
uses
to
create
its
web
pages
and
also
in
in
modern
web
server.
You
probably
use
razer
pages,
which
is
a
beautiful
abstraction
on
top
of
asp,
mvc.
C
But
the
code
that's
running
in
the
browser
is
compiled
c
sharp
code
and
sitting
on
top
of
net,
and
so
this
is,
if
you
have
ever
done,
wpf
or
uwp
or
even
windows
forms.
This
is
kind
of
familiar
because
it's
the
same
basic
programming
model
where
you've
got
c
sharp
code.
That
is
reacting
to
any
events
that
occur.
C
You
know,
so
the
user
clicks
on
something
or
types,
something
or
even
mouse
is
over
something
all
of
those
are
generating
ui
events
that
are
then
handled
by
your
c
sharp
code.
C
So
it
it
feels
yeah,
and
it's
the
same
if
you've
done
any
angular
or
react
programming
right.
It's
the
same
idea
in
all
of
this
is
smart
client
development.
You
know
those
the
same
the
same
event,
driven
ui
concepts
that
really
were
pioneered
by
visual
basic
back
in
1991.
C
I
guess
and
and
to
be
fair,
I
mean
it
predates
that
right,
x,
windows
and
a
lot
of
things
happened
before
visual
basics
showed
up
too.
C
C
C
The
one
thing
that
blazer
brings.
That's
pretty
interesting.
Is
that
blazer
also
has
this
idea
of
running
the
code
on
the
server
and
giving
the
user
the
exact
same
user
experience,
but
the
code
is
actually
running
on
the
web
server
and
not
on
the
client,
and
this
is
useful
for
a
couple
different
reasons,
one
being
that
it
makes
it
pretty
easy
to
support.
C
You
know
things
like
google
search
indexing,
because
when
you
detect
that
it's
a
robot
coming
in
like
a
google
or
bing
indexing,
you
redirect
the
robot
to
your
server
side,
implementation,
which
is
the
same
right.
You
just
you,
have
your
app
run
server
side,
so
they
can
index
your
html
and
but
when
the
user
uses
it,
you
have
it
run
on
the
client
because
it
might
be
faster.
C
Microsoft
has
got
this
experimental
thing
called
web
window,
which
is
kind
of
like
electron,
but
a
lot
lighter
weight,
one
of
the
one
of
the
big
drawbacks
that
I
think
we
all
know
about.
Electron
is
like
when
you
run
slack
you
all.
Your
memory
goes
away
right,
elect
electron
is
not
actually
very
efficient
and
so
web
window
is
a
much
lighter
weight
version
of
electron
in
a
sense,
and
then
you
know,
ionic
has
this
technology
now
called
capacitor,
which
is
basically
the
successor
to
cordova.
C
So
it
allows
you
to
create
a
deployable
app
for
iphone
and
android
that
you
write
it
using
web
technologies
and
angular
and
react
support.
Capacitor
or,
I
should
say,
capacitor
works
with
angular
and
react.
I
don't
know
if
capacitor
currently
works
with
blazer,
it
might,
but
I
haven't
tested
that
I
don't
know
for
sure.
C
So
with
that,
let's,
let's
get
rid
of
all
of
that
and
and
look
at
some
code.
So
to
start
with,
my
mouse
went
away
there
we
go
so
to
start
with.
Let's
just
create
a
a
new
project
and
in
visual
studio
2019
I
can
create
a
blazer
app
and
so
I'll
click.
Next
here
and
we'll
you
know
let
it
have
its
so,
let's,
actually,
let's
do
blazer
server
app.
I'm
going
to
start
this
way,
just
so
that
you
know
you
can
see
kind
of
end
to
end
how
this
works.
C
And
now
I
get
the
choice
here:
whether
I
want
to
use
net
core
for
most
of
us
will
be
dotnet
core,
31
or
5.0,
but
I'm
going
to
use
net
5.0
and
I'm
going
to
create
a
blazer
server
app,
and
so
this
is
going
to
run
on
the
server
not
on
the
client
and
so
I'll
go
ahead
and
create
this
solution,
and
you
can
do
this
by
the
way,
using
visual
studio
code
and
and
the
the.net
command
line
as
well.
I'm
comfortable
using
visual
studio,
so
I'm
using
this
tool.
C
But
if
you
say
I
don't
use
visual
studio,
I
use
visual
studio
code
or
sublime
or
some
other
text
editor,
that's
fine.
You
can
go
to
the
command
line
and
type
net
new
and
create
a
blazer
app
that
way
and
then
just
use
a
lighter
weight,
editing
environment.
C
C
So
when
I
look
at
the
solution
that's
been
created
here,
what
I've
got
is
a
modern,
dotnet,
5
asp.net
core
type
app.
So
I've
got
my
startup
cs.
Well,
I've
got
my
program
cs,
which
is
what
gets
launched
first,
my
startup
cs,
where
I
can
do
all
of
my
dependency
injection
container
initialization.
C
I've
got
my
app
settings
json
and
I've
got
a
www
root
folder
here
and
of
course,
I
also
have
my
launch
settings.json
to
control
how
this
launches
inside
of
visual
studio
the
ww
root.
Folder
is
where
I'm
going
to
have
my
my
css
and
by
default
they'll
bring
in
bootstrap
and
open
ionic.
C
You
don't
have
to
use
those.
You
can
use
anything
that
you
want,
because
this
is
a
web
app
after
all,
and
but
basically
any
static
content
for
your
site
is
going
or
for
your
app
is
going
to
go
into
this
folder
and
then
there's
a
pages
folder,
which
is
where
my
blazer
pages,
which
are
really
called
razer
components
are
going
to
go
and
they
have
a
dot
razor
extension
to
them
and
we'll
get
into
that
in
a
little
bit.
You
definitely
because
this
is
launched.
C
It's
a
website
right,
so
it's
launched
originally
from
the
server.
You
have
a
couple
cshtml
files
that
are
kind
of
for
there
for
bootstrapping
purposes
to
get
to
get
blazer
launched
before
everything
runs.
C
And
so
my
actual
pages
are
my
index
page,
a
fetch
data
page
and
a
counter
page.
That's
this
is,
of
course,
the
default
right,
there's
also
a
shared
folder,
as
you
might
guess.
This
is
where
you've
got
things
like
main
layout
or
navigation
menu.
Basically,
any
sort
of
razer
component
that
you
want
to
reuse
across
your
pages
is
probably
going
to
go
into
your
shared
folder
versus
individual
pages
and
then
part
of
the
the
samples
you
know
start
app
includes
a
couple
different
c
sharp
files
that
are
essentially
acting
as
data
services.
C
There's
also
a
file
here
called
imports.razer,
which
contains
any
sort
of
global,
using
statements
because
remember
we're
in
c-sharp,
basically
right,
and
so
these
are
our
name
spaces
that
I
want
to
be
available
globally
and
then
app.raiser,
and
this
is
the
actual
entry
point
for
my
app.
So
if
we
kind
of
step
back,
you
know
when
we
run
this
when
I
hit
f5
in
a
moment
here,
what's
going
to
happen,
is
program.cs
has
my
main.
C
Startup.Cs
is
going
to
navigate
the
user
to
the
host
file
and
the
host
file,
which
is
really
kind
of
my
my
start
point
for
the
website.
If
you
will,
the
host
file
is
going
to
load,
blazer
and
run
app.razer,
and
from
that
point
everything
running
is
going
to
be
running
in
blazer,
and
so
this
is
the
bootstrapping
right.
It
runs
program.
Cs
configures
runs
this
very
lightweight
web
page
that
all
it
does
is
download
some
javascript
shims
and
then
launches
the
blazer
app
itself.
C
And
so,
if
I
hit,
you
know,
hit
f5
here
run
this
in
iis
express,
and
you
probably
noticed
when
I
was
starting
the
app
that
I
could
have
chosen
to
run
this
in
docker.
Of
course,
too,
on
the
server
side.
C
All
of
this
works
great
in
linux
containers
just
as
well
as
it
does
in
windows,
and
so
here
I
have
my
website
running
and
remember
this
one
is
everything's
running
on
the
client
side
right
on
the
server
side,
but
I
can
navigate
between
my
pages
and
so,
if
I
click
on
the
counter
page
and
click
this
button
now
what's
happening
here
is
that
every
time
I
click
the
button,
obviously
the
this
counter
is
incrementing.
C
Well,
what
what's
happening
here
is
that
when
I
click
the
button,
there's
a
thin
layer
of
javascript,
that's
running
on
the
client
and
that
javascript
sets
up
a
signal,
r,
pipe
communication
pipe
between
the
browser
and
the
web
server,
and
so
when
I
click
this
button,
a
message
is
immediately
sent
from
the
browser
to
the
server
using
signalr
and
on
the
server
my
code.
My
code
gets
a
click
event
and
in
that
click
event,
of
course,
I'm
obviously
incrementing
this
counter
and
what
blazer
does
is.
It
sees.
B
C
I've
changed
that
value
on
the
server,
and
so
it
takes
that
value
and
sends
it
back
to
the
client
through
a
signalr
message,
and
then
the
ui
gets
updated
based
on
that
message,
and
so
I'm
not
actually
doing
anything
with
signalr
right.
This
is
all
to
me.
This
is
all
magic
when
I
click
the
fetch
data
page.
What
happens
is
that,
because
I've
navigated
to
this
page,
the
the
page
runs
on
the
server
calls
some
sort
of
a
service
that
retrieves
weather
data
and
then
sends
that
information
back
to
the
browser.
C
But
I
think
the
important
thing
that
I'm
trying
to
get
at
here,
especially
on
the
counter
page,
is
just
the
immediacy
of
this
right.
This.
This
is
highly
interactive
to
the
user.
It
feels
like
they're
in
a
single
page,
app
when
in
fact,
everything's
running
on
the
server
now
I'll
contrast
that
to
let's
and
I'll
show
you
the
code
here
for
both
of
these
in
just
a
moment,
but
let's
create
a
new
project
and
I'll
create
a
blazer
app
and
we'll
call
it
whoops
I'll
call
this
one
blazer
client
app
three.
C
C
If
we
look
at
solution
explorer
quickly
for
this
project,
you
can
see
that
it
looks
largely
the
same.
It's
got
a
program
cs
because,
even
though
this
runs
100
in
the
client,
it
does
have
to
start
something
on
the
server
as
a
static
web
server
so
that
it
can
download
the
files
right.
So
that's
basically
program
cs.
Does
that
in
my
ww
root
static
content?
C
Now,
because
nothing's
running
on
the
server
right,
we
actually
have
an
index.html
and
the
index.html
is
going
to
download
the
blazer
compiled
blazer
app
and
then
it's
going
to
run
app.raiser
and
once
it
runs
app.raiser
everything's
running
in
blazer
and
then
app.razer
ultimately
will
be
loading.
My
pages,
which
are
the
same
pages
I
had
before
they'll,
be
loading
my
razer
components
that
are
shared,
which
are
exactly
the
same
ones
that
I
have
before.
C
C
And
it'll
download
the
web
assembly
into
the
browser,
and
so
it's
the
startup,
the
bootstrapping
is
not
the
same,
but
now
you
can
see
that
this
application
looks
the
same
and
works
the
same.
C
When
I
click
the
fetch
data
page
what's
happening,
is
this
page
gets
loaded
in
the
browser
and
there
is
still
a
service
call.
That's
calling
off
to
my
server
to
retrieve
the
weather
data,
but
the
actual
rendering
of
the
of
the
ui
and
everything
else
is
100
running
in
the
browser.
C
So
in
that
regard,
this
app
is
exactly
you
know.
You
can
think
about
it.
It's
exactly
like
an
angular
or
react
app
and
that
everything
you
see
here
is
running
completely
in
the
client
side,
except
for
the
service
call
to
get
the
weather
data.
C
C
C
This
is
this
is
the
entry
point
for
the
blazer
app,
and
it
says
that
basically,
I'm
going
to
set
up
my
my
router,
my
blazer
router,
and
I
want
you
to
use
this
main
main
layout
to
lay
things
out,
there's
a
whole
bunch
of
things
you
can
do
in
in
app.razer,
including
setting
up
a
authentication
and
authorization,
and
you
know
things
like
that,
but
you
can
see
here
that
this
is
the
essentially
the
404,
although
obviously
it's
a
single
page
app.
C
But
if
we
look
at
my
index
dot
razor,
so
this
is
the
landing
page
that
I
end
up
on.
This
is,
like
you
know
the
simplest
kind
of
page.
It
says:
hey,
there's
my
routing
directive,
I
say
my
page
is
accessible
using
the
slash,
that's
the
root
page,
you
know,
and
now
here
I'm
using
razer
syntax,
although
really
it's
just
html
to
start
with
and
say
here,
here's
some
content
I
want
to
render,
and
then
it
has,
this
tag
called
survey
prompt.
Now
this
is
kind
of
cool,
because
survey
prompt.
C
Let
me
just
pin
this
open
here.
If
I
look
in
my
shared
directory
survey,
prompt
is,
in
fact
a
razer
component,
and
so
what
I've
done
or
what
microsoft
provides
for
us
is
a
shared
ui
component
that
I
can
put
on
any
page
anywhere.
I
want
if
I
want
a
survey,
and
so
you
can
see
that
this
this
is
not.
It
doesn't
have
a
page
directive
at
the
top,
because
it's
not
a
page,
it's
just
a
chunk
of
ui,
it's
a
reusable
ui
widget
and
they
just
have
a
div
tag
with
some.
C
You
know
whatever
else-
and
I
say
hey
here:
please
take
our
survey
and
let
us
know
what
you
think
and
also
I've
got
a
little
bit
of
code,
because
this
is
again
I
can
write
code
that
provides
support
for
any
any
page
behaviors
and
in
this
particular
case
I
want
to
be
able
to
pass
in
a
title
for
my
survey.
C
If
we
look
at
a
little
more
interesting
page,
let's
look
at
the
counter
page,
so
the
counter
page
again
has
a
routing
tag
at
the
top
that
says:
hey
yeah
I
want
to
to
get
here.
You
you
do
slash
counter.
Some
html
here
is
some
razor
syntax.
That's
saying
I
want
to
display
the
current
count
and
I'm
using
at
currentcount
here,
which
is
basically
a
type
of
data
binding.
If
you
really
think
about
this,
if
you're
coming
from
a
xaml
or
windows
forms
background,
that's
this
is
a
type
of
data
binding.
C
That's
what
I'm
data
binding
to
here
and
I
have
a
method
called
increment
count
and
that's
what
I'm
binding
to
the
click
event
for
the
the
button,
and
now
this
one
you
know
this
method
is
obviously
very
simple:
it
just
increments
the
value
but
see
how
simple.
This
is
right,
very
simple,
very
straightforward,
and
this
code
is
identical,
whether
it's
running
on
the
client
or
the
server,
because
that's
the
way
blazer
works
all
right.
Let's
in
in
the
little
bit
of
time,
I
have
left.
C
Let's
look
at
a
slightly
more
sophisticated
example
that
I
think
hopefully
shows
just
a
little
bit
more
of
what
you
can
do
and
will
maybe
inspire
some
of
the
fun.
C
When
I
ran
this
particular
application,
it's
the
server
side
code
for
this
one
is
running
in
blazers.
This
is
all
running
on
a
linux
container
in
blazer.
C
I
still
have
the
counter
in
the
fetch
data
pages,
because
you
know
it
just
makes
for
a
good
demo.
But
the
interesting
part
here
is
that
if
I
click
list
people
now
what's
going
on,
is
I'm
actually
using
the
open
source,
csla.net
business
logic
framework
and
it's
making
us
a
call
to
the
server
to
an
application.
Server,
retrieving
this
list
of
people
and-
and
I
can
say
oh
I'd
like
to
add
a
person-
oh,
I
can't
because
I'm
not
authorized
well,
maybe
I
better
log
in
and
this
this
doesn't
really
log
in.
C
But
now
this
is
a
whole
lot
more
interesting
right
because
notice
that
it
says
the
name
field
is
required.
Person
name
required
if
I
start
typing
a
name
like
rocky
notice
that
it
says
oh
check
capitalization,
because
now
I've
actually
got
you
know
it
went
from
name
is
required
to
saying
check
capitalization.
That's
because
we
assume
there's
a
rule
that
says
well,
you
maybe
should
have
your
first
letter
be
capitalized
but
notice
that
that
it's
it's
a
yellow.
C
You
know
it's
a
warning,
not
an
error.
You
can
still
save
this
person.
It's
just
like.
Are
you
sure
right?
But
but
the
kind
of
the
key
thing
here
is
notice
that
these
rules
are
changing.
In
literally
as
I
press
each
key,
the
rules
are
being
run
and
that's
because
the
the
the
csla
rules
engine
is
running
right
here
in
the
client
on
the
browser
and
it's
able
to
run
on
each
keystroke,
because
I'm
not
going
to
the
server
right.
C
I
can
create
for
the
user
the
same
rich,
interactive,
kind
of
user
experience
that
that
I
think
we
all
wish
we
could
have
you
know
now.
This
particular
application
has
a
has
a
very
strange
rule
for
the
purposes
of
demo,
in
that
the
letter
z
is
not
allowed
in
any
name
but
notice
again
that
as
soon
as
I
type
a
z,
my
rules
come
into
play.
C
You
might
you
know
nobody
would
do
that
in
real
life,
but
you
get
my
my
drift.
I
hope
so
now.
If
I
save
this
person,
you
know
it's
saved,
I
can
go
and
I
can
edit
a
different
person,
yeah
and
notice
that
this
name
length
field
here
is
changing
as
as
I
type
because,
again,
that's
just
another
business
rule,
that's
running
is
that
we
want
to
have
the
name
show
up.
C
Is
a
little
more
complex
and-
and
I
think
I
can't
go
through
it
in
detail
in
the
interest
of
time,
but
I
want
to
show
you
just
to
inspire
some
thought
right
so
so
this
solution
is
has
a
blazer
client
project
and
it
also
has
a
blazer
server
project,
because
this
app
is
running.
It's
a
single
page,
apps
all
of
the
pages
and
everything
are
running
on
the
client.
C
But
in
this
case
the
server
actually
does
do
some
real
work
and
has
a
data
portal
controller
for
csla.
It
still
has
the
weather
controller
and-
and
so
the
kind
of
the
key
thing
I
think
here
that
I
would
like
you
to
understand
is
that
the
the
server
is
in
fact
doing
two
things:
one:
it's
a
static
file
server
to
to
deploy
the
blazer
app
to
the
client
and
also
it's
an
app
server
that
has
controllers
that
are
being
called
from
the
blazer
client
app,
there's
also
a
blazer
shared
project
here.
C
C
All
of
these
properties,
all
of
these
business
rules
and
everything
that's
in
here
runs
on
the
client
and
the
server
as
needed
and
for
anybody
who's
followed
my
work
with
csla
over
the
last
like
23
years.
You
know
that
that
the
whole
concept
behind
csla
has
always
been
to
have
code
shared
and
deployed
between
the
client
and
the
server
and
so
blazer.
C
C
C
C
I'd
also
like
to
point
out,
if
we
come
back
to
app.razer
on
the
client
that
this
app,
like,
I
pointed
out,
uses
authorization,
and
so
what
happens
here
is
that
in
my
top
level,
router
page
I
say
well,
actually
I
don't
want
to
just
route
you.
I
want
to
route
you
based
on
authorization
and
if
you're,
if
we're
authorizing,
then
we
want
to
tell
the
user
we're
authorizing.
C
But
but
what
really
happens
here
is
because
I've
told
blazer
to
incur
a
little
bit
of
extra
overhead
and
authorize
as
we
go
into
every
page.
C
That
means
that,
in
my
pages
like
in
my
edit
person
page
at
the
very
top
here,
I
can
have
an
attribute
that
says
that
only
users
in
the
admin
role
can
get
to
this
page,
and
so
that
too,
this
is
a
feature
of
blazer
that
I
think,
is
really
compelling
because
it's
sitting
on
top
of
asp.net
core
and
the
way
that
asp.net
core
uses,
claims-based
authentication
and
authorization,
and
it's
just
extended
into
blazer
now
in
practice,
this
authorized
attribute
gets,
can
get
really
sophisticated
because
it
yeah
it
has
the
simple
model
where
it
just
looks
at
roles,
but
it
can
actually
invoke
methods
to
do
much
more
complicated
decisions
based
on
the
user's
identity
and
claims
as
to
whether
they
can
or
can't
get
into
a
given
page.
C
Maybe
some
error
message-
that
if
there's
any
sort
of
error
talking
to
the
application
server
as
the
page
loads,
my
data
won't
yet
exist.
I
don't
yet
have
a
model,
and
so
I'm
going
to
display
that
I'm
loading
person
data,
but
once
the
model
is
not
null,
you
know
once
I've
actually
got
the
data
back
from
the
server,
then
I'm
going
to
say:
okay,
well,
here's
the
the
table-
I
probably
should
have
done
this
with
div
tags,
but
yeah,
I'm
not
I'm
not
the
expert
web
developer
here
besides.
C
This
goes
to
show
that
this
is
just
html
right,
it's
razer
syntax,
so
I
could
use
fancy
div
tags
or
I
can
use
tables
or
whatever
I
want
and
then
in
my
rows.
So
here's
the
id
number
now
some
of
this
relies
a
little
bit
on
the
features
of
the
csla
rules
engine.
C
But
here
I'm
saying
is
the
user
authorized
to
see
the
the
name
property
and
if
they
are
not
authorized
to
see
it,
I'm
not
going
to
show
it
to
them,
but
if
they
are
authorized
then
they
get
to
see
it,
I'm
going
to
show
them
the
friendly
name,
but
then
I've
got
this
text
input.
C
Well,
what
is
text
input?
That's
a
weird
tag,
and
so,
if
I
look
at
my
shared
folder
here,
I've
actually
got
another
ui
widget
that
understands
text
input,
and
so
here
I'm
using
an
input
tag
in
order
to
get
the
the
value
but
notice
that
I've
actually
also
I'm
saying
this
input
field
should
only
be
an
enabled
if
the
user
is
currently
if
the
current
user
is
authorized
to
write
to
this
property.
C
Also
I'm
displaying
any
error
text
warning
text
or
information
text,
which
is
how
those
red,
yellow
and
blue
text
you
know
showed
up
underneath
that
text
box,
and
so
the
the
really
important
thing
I
think
here-
and
this
is
maybe
the
most
kind
of
compelling
feature
of
blazer
in
my
opinion-
is
that
I
can
create
these
reusable
things
like
text
input
use
it
throughout
my
application
and
if
I
decide
that
I
need
to
change
the
style,
look
or
behavior
of
how
text
input
works
across
my
entire
application.
C
C
Now,
if
you
go
look
in,
if
you
go
to
cslanet.com
and
go
look
at
the
github
recall
for
csla.net
in
the
samples
folder,
there's
a
sample
called
project
tracker
and
that
one
actually
goes
takes
us
a
step
further
and
says
you
know
this
entire
block
of
of
con
of
code
here.
That
could
be
a
thing
all
by
itself,
and
so
in
the
in
that
project
it
actually
is
text
input
row.
C
And
and
we
are
able
to
get
rid
of
all
of
that,
and
so
okay
can
you
you
know,
then
then
you
can
start
to
say
well.
Actually
every
one
of
these
can
become
one
line
that
this
could
become
one
line.
This
can
become
one
line,
and
so
you
really
shrink
your
your
the
amount
of
ui
code
that
you're
writing
and
make
your
overall
application
almost
infinitely.
B
C
So
this
was
this
was
fast.
I
know
I
went
through
an
awful
lot
of
stuff
very,
very
rapidly.
I
guess
I
don't
have
a
closing
slide
here.
So
we'll
just
leave
it
on
this
page,
but
I
appreciate
you
taking
the
time
this
evening.
I
hope
this
is
exciting.
I
I
think
blazer,
if
you're
coming
at
it
from
a
windows,
forms
wpf
uwp
background
blazer
is
kind
of
in
my
mind,
kind
of
a
natural.
C
It's
it's
got
all
the
goodness
of
html,
css,
plus,
all
the
goodness
and
actually
better
of
things
like
xaml
data
binding
and
eventing.
It's
it's!
It's
a
beautiful
ui
framework.
If
you're
coming
at
this
from
angular
or
react
perspective,
it's
going
to
feel
pretty
familiar
other
than
you're
going
to
be.
Writing
your
code
in
c
sharp.
But
you
know,
realistically,
all
these
things
are
are
just
ways
of
creating
smart
client
apps
that
run
in
any
modern
browser
right,
very,
very,
very
exciting
stuff.
C
So
with
that,
I'm
going
to
call
it
a
day
and
thank
you
for
your
time.
B
Thank
you.
Thank
you,
so
much
rocky
for
that
really
good
talk
on
blazer
yeah.
B
So
so
maybe
I
will
start
off
with
with
my
own
question
on
this,
because
yeah
yeah,
I
haven't
been
able
to
do
to
explore
blazer
as
much
before,
and
and
and
one
of
the
things
that
that
I
did
not
understand
was
that
you
know
that
different
clearly
was
the
difference
between
the
server
and
the
client
and
how
to
use
them
and
what
scenarios
to
use
them
and
and
and
one
thing
that
was
that
was
on
my
mind-
was
that
weather
forecast
demo
that
the
blazer
has
always
had.
B
If
you
make,
if
you
create
a
client
application,
for
example,
and
then
it's
it's
a
purely
client
app.
Does
that
mean
that
the
call
to
the
weather
forecast
service
is
coming
from
the
client
it's
coming
from
your
machine,
or
is
it
coming
from
a
server
and
getting
called.
C
B
Yeah
but
but
I
mean,
if
you
made
your
blazer
up
purely
a
client
side,
one,
the
the
decline
sign
implementation
when.
C
Well,
if
you're
writing
a
an
app
that
is
100
client-side
and
does
not
call
any
services.
Obviously,
then
it
it
wouldn't
be
able
to
get
something
like
weather
data.
Unless
that
weather
data
was
already
on
your
device.
C
All
right
right,
I
mean
that's,
that's
just
true
of
any
client-side
app.
If
you,
if
you
don't,
have
access
to
any
servers,
then
your
application
can
only
do
things
with
thing.
You
know
data,
but
that's
where
I
think
being
able
to
deploy
as
a
progressive
web
app
is
maybe
important,
because
you
can
think
about
an
application
that
an
insurance,
adjuster
or
somebody
on
a
construction
site
might
use
where
maybe
they
don't
have
internet
connectivity.
B
Cool
cool!
That's
it
that's
a
really
good
insight,
anyway
july.
Just
let
me
take
this
time
to
welcome
brian
lagunas
is
gonna,
be
our
next
speaker,
hey.
C
B
Hey
we're
going
to
get
back
to
you.
I
think
there's
only
just
one
question
from
the
the
audience
joseph
joseph
managan
and
he
was
he
was
asking
about.
He
was
asking
about
the
do.
We
have
any
public
poster
for
this
example
solution.
Maybe
maybe
he
wants
to
try
it
out
for
himself
and
maybe
studying
it.
I
I
was
both
surprised
and
glad
that
that
you
were
able
to
show
us
a
sample
that
used.
You
know.
B
Csra.Net
csla
has
been
around
for
for
for
for
a
long
time
and
being
able
to
bring
all
the
principles
of
csla
into
something
as
new
as
blazer
is
really
a
good
sign,
and
I
know
for
for
for
this
technology
that
this
is
something
that
we
could
incorporate
to
do.
You
know
some
some
of
our
legacy
apps.
If
we
want
to
make
new
parts
of
web
application
or
new
versions
of
web
applications,
something
that
we
could
use
our
existing
backend
code
for
perhaps.
C
Yeah
yeah,
so
no
csla
is,
of
course,
an
open
source
project
and
has
been
for
like
23
years
now,
and
so
it's
on
github.
I
I
put
the
a
link
into
our
private
chat
here,
so
I
think
it'll
show
up
maybe
on
the
youtube
channel
or
whatever,
but
the
easiest
way
is
to
go
to
cslanet.com
and
that'll
have
the
link
to
the
repo
and
the
downloads
and
the
new
get
packages
and
all
the
information
is
there.
A
B
All
right
so
right
for
for
lack
of
a
a
virtual
clap
machine
here
or
something.
Thank
you
very
much.
Thank
you
very
much
for
watching
and
and
and
and
and
thank
you
so
much
for
for
being
here
yeah.
We
know
it's
it's
it's
it's
now
6am
where
you
are
and
then
and
and
we're
really
grateful
that
you
gave
us
this
chance
any
last
words
before
we
before
we
say
goodbye
and
and
move
to
the
next
stop.
C
Well,
it's
been
my
pleasure.
I
I
really
appreciate
the
opportunity
to
speak
and
and
yeah
it's
early
in
the
morning
for
me,
but
it's
in
the
evening
for
you
guys
and
so
it's
I
just
it's
it's
all
great
and
I'm
really
glad
that
I've
had
this
opportunity
and
I
wish
you
all
the
best.
B
Thank
you.
We
we
appreciate
your
time.
Thank
you
so
much
for
that
all
right,
so
that
was
rocky
latka
in
his
talk
about
blazer
and
how
it
plays
with
with
csle.net,
which
is
been
around
for
for
almost
a
quarter
wow.
So
it's
so
it's
so
hard
to
say
that
almost
a
quarter
century
yeah
yeah
23
years,
yeah
yeah.
So
we
move
on
to
you,
brian,
and
and
thank
you
so
much
for
getting
up
at
5
00
a.m.
Now
it's
5
a.m.
Your
time
now.
B
A
B
Yeah
logistics,
yeah,
yeah
and
he's
the
co-leader
of
I
don't
know
if
I'm
saying
it
right.
Boys,
boys.
B
And
yeah
and
you're
here
to
talk
to
us
about
prism
and
and
and
you
see
that
we're
first
ammo
so
I'll,
let
you
I'll
let
you
take
the
floor
and
go
for
it.
A
A
If
you
don't
stop
me
I'll,
just
keep
going
so
I
gotta
set
a
timer.
So
how
long
do
I
have
I'll
give
you
15
minutes,
50
min?
Oh,
my
god
that
is
not
well.
A
All
right,
so
the
way
this
is
gonna
work
is.
I
need
questions
so
be
sure
to
add
comments
in
the
comments
section.
I
will
be
monitoring
them
feel
free
to
ask
a
question.
As
I
talk
I'll
constantly
be
glancing
over,
but
a
little
bit
about
me.
My
name
is
brian
lagunas.
I
am
a
senior
product
owner
at
infrastics,
where
we
write
basically
the
world's
best
ui
components
to
use
in
your
in
your
applications.
Be
it
angular,
blazer
wpf,
win,
forms,
asp.net
react,
it
doesn't
matter.
A
You
need
charts
and
grids
and
maps
and
all
that
cool
stuff.
We
have
them
for
you,
I'm
also
most
well
known
for
being
the
owner
and
maintainer
of
prism.
So
while
I
do
mean
you
know,
I
am
actively
involved
in
my
local
community
with
boise
code
camp
and
netdug,
I'm
also
more
active
in
the
global
community,
as
you
can
see
here,
I'm
speaking
at
your
event
here
in
the
philippines,
and
so
I'm
also
a
pluralsight
author
trainer.
All
that
good
stuff
I
like
to
do
community
stuff.
A
If,
at
any
point,
you
would
like
to
reach
out
to
me
the
best
way
to
do
it
to
be
on
twitter
just
hit
me
up
at
brian
laguna,
so
you
can
see
the
the
link
right
over
here.
A
Please
subscribe
my
youtube
channel
youtube.com
brian
lagunas,
and
I
live
stream
every
thursday,
which
is
for
me,
is
today
on
twitch,
so
I
live
stream
on
twitch
at
twitch
tv,
slash,
brian
lagunas,
so
you
can
reach
me
there
at
any
time,
and
so
today,
I'm
here
to
talk
to
you
about
building
composite
xaml
applications
with
prism
and
you're,
probably
thinking
what
the
heck
is
a
composite
sample
application.
A
Well,
I'm
glad
you
asked
because
it's
it's
something.
This
is
how
you
need
to
be
writing
applications.
Let's
talk
about
some
challenges
as
a
developer
that
we
run
into
when
we
write
applications
right.
A
First,
your
your
team
right,
even
if
it's
just
two
people
like
here,
I
say
large
teams,
I
come
from
the
enterprise-
I'm
used
to
writing
really
big
applications,
so
I'm
used
to
dealing
with
large
teams
that
span
multiple
continents
right
and
so
one
of
the
big
challenges
you
have
when
dealing
with
teams
or
just
more
than
one
person,
is
that
you're
always
working
on
the
same
project
files
right
or
the
same
projects
and
you're
trying
to
you're
trying
to
work
on
functionality.
A
That
may
be
different,
but
touches
various
portions
of
this
of
the
application
that
may
be
in
the
same
files
right,
and
so
that
is
a
challenge
that
we
we
have
to
overcome,
and
this
is
this
comes
into
play
really,
when
you're
dealing
with
source
control,
you're
trying
to
check
in
and
do
those
merge
conflicts
it's
like
dude.
I
was
working
on
the
same
file.
You
were
and
it's
a
big
mess
right.
A
Another
thing
we
have
to
worry
about
is
duplicate
infrastructure
code
throughout
what
this
means
is,
and
I'm
not
necessarily
talking
about
code
reuse
within
your
application,
like
you,
have
the
same
method
defined
I'm
talking
about
full
on
infrastructure
being
reused,
for
example,
the
simplest
example
I
can
think
of
is
maybe
like
a
login
process
right.
You
have
a
standard
login
screen
in
your
company.
A
You
have
login
code
that
handles
authentication
authorization,
and
you
know
you
wind
up
kind
of
duplicating
that
in
every
application
would
it
be
nice
just
to
have
like
a
little
module
just
dedicated
to
login
and
just
add
it
to
whatever
application
you
want
and
it
just
magically
works
right.
Another
thing
you
have
to
worry
about
is
like
consistent
project
structure.
A
This
is
something
I
get
on
a
lot
of
devs,
because
I
feel
this
is
really
important
when
you're
dealing
with
a
lot
of
applications,
especially
in
an
enterprise,
it's
important
to
have
the
same
project
structure,
to
write
your
applications.
The
same
way
there's
a
number
of
benefits
to
this.
First
of
all,
you'll
be
more
efficient.
Writing
applications.
A
When
you
have
a
pattern,
when
you
have
a
standard,
if
you
will
you'll
be
more
efficient
and
less
likely
to
make
mistakes,
and
also
what
I
really
like
about
this
is
context
switching
how
many
times
when
you're
jumping
from
one
app
to
another
app
to
another
app.
Oh,
I
gotta
fix
a
bug
in
this
app.
Oh,
I
gotta
add
a
feature
to
this
app.
Now
I'm
gonna
go
to
this
app
over
here.
A
Well,
if
your,
if
your
projects
are
structured
in
the
same
way,
or
at
least
very
similarly,
the
context,
switching
isn't
as
dramatic
right,
it's
easier
to
go
from
one
application
to
another
to
another
without
having
to
to
like
completely
change
your
thought
process
on
how
the
application
works,
and
things
like
that
right
so
and
another
benefit
to
this
is
bringing
on
new
devs.
That's
that's
another
benefit.
A
Another
thing
we
have
is
code
quality.
We
all
know
code
quality
is
when
you
have
standards
in
place.
Your
code
quality
normally
goes
up.
If
you
don't
and
you
just
kind
of
write,
an
application,
one
off
you're
gonna,
be
writing
things
differently
every
time,
so
that
can
really
hurt
your
code.
A
Quality
quite
a
bit
actually
and
then
obviously
the
the
biggest
challenge
we
have
is
that
app
requirements
change
over
time,
so
you're
constantly
updating
code,
maintaining
code,
extending
code,
adding
new
features,
and
so
we
want
to
protect
ourselves
from
having
a
volatile
code
base
to
where
maybe
we're
breaking
crap
all
the
time
right.
We
don't
want
to
do
that.
A
We
don't
want
to
break
stuff,
and
so,
if
we
look
at
a
typical
application
design
in
the
enterprise
or
really
anywhere
oh,
this
is
what
we
refer
to
as
a
monolith
right,
a
monolith,
one
big
application
and-
and
I'm
not
necessarily
talking
about.
Oh,
I
have
a
class
library
or
I
have
some
ui
controls.
No,
so
imagine
we're
in
visual
studio
right
and
we
have
a
main
project
and
the
main
project
is
essentially
the
application
like.
A
I
said,
I'm
not
talking
about
the
class
library
or
the
user
control
library
or
or
the
business
csla
class
library
right.
I'm
not
talking
about
that
stuff.
I'm
talking
about
all
the
views,
all
the
view
models
as
you're
using
nvvm,
but
you
should
be
in
a
xaml
application,
but
all
the
views
all
the
view
models
all
the
services,
basically
all
the
code,
all
the
logic,
everything
that
makes
up.
You
know
your
application.
A
It
kind
of
resides
in
one
big
executable
and
that's
not
how
we
want
to
do
things,
because
this
design
completely
goes
against
all
those
challenges.
We
have
all
those
challenges
we
just
talked
about
are
amplified
in
a
design
structure
like
this
right.
Imagine
you
know
trying
to
modify,
extend
or
maintain
any
of
this
code
with
multiple
teams.
A
It's
just
it's
not
pretty
it's
not
pretty.
So
what
we
want
to
get
to
is
something
more
like
this
right.
So
now
imagine
you're
inside
visual
studio.
You
have
your
solution,
but
now
we
have.
Our
main
project
contains.
What's
called
a
shell
and
a
shell
is
just
like
a
master
page
like
a
master
page
right
and
it
doesn't
know
anything
about
your
application.
A
Really
it's
very
dumbed
down
and
it'll
have
one
mainly
one
view:
it's
gonna
be
your
shell,
which
is
like
the
main
window
of
your
application
and
then
what
we
do
is
then
we
have
different
projects
and
we'll
have
a
project
for
each
major
functional
area
of
your
application.
We
refer
to
that
as
a
module.
Okay,
so
a
module
represents
a
major
functional
area
of
your
application.
So
if
you
imagine
like
outlook
right
outlook
has
like
mail
contacts
calendar
right,
you
can
kind
of
think.
A
A
I
think
like
been
around
a
long
time,
and
so
what
is
the
prism
library?
Essentially
the
prism
library,
is
a
xaml
application
framework.
It's
about
guidance,
it's
a
lot
patterns
and
practices.
It
helps
you
write,
testable
maintainable,
extensible
code
that
can
evolve
over
time
and
be
really
a
stable
code
base.
Okay,
and
it's
really
all
about
guidance
guiding
you
down
a
path
right
to
write,
successful
applications.
A
Now,
I'm
not
guaranteeing
you
that
you're
not
going
to
write
crap
code
using
this
framework-
oh
you
most
definitely
will.
But
it's
harder
to
do
because
of
the
the
framework
that
prism
provides
you.
It
really
helps
guide
you
down
that
path
to
write,
good,
clean.
You
know,
extensible
code,
that's
separated!
We
have
separation
of
concerns.
It's
testable
all
that
great
stuff.
Okay
and
the
best
part
about
this.
It
doesn't
cost
you
anything.
It's
open
source,
it's
part
of
the.net
foundation.
It's
on
github!
A
I
will
throw
a
link
out
there
later,
but
the
code's
all
out
there
there's
nothing
to
it
right.
It's
open
source,
everyone
loves
open
source,
it
means
it's
free
and
this
will
help
you
be
successful.
I've
I've
never
personally
written
an
app
with
prism
that
has
failed.
How
about
that
I'll,
throw
that
out
there.
A
Now
you
may
be
asking
yourself,
okay,
so
what's
included
in
prism
here,
what
what
do
we
get?
What's
in
the
box?
Brian?
What?
What
is
this
well?
First,
obviously
mvvm
support
you're
gonna,
get
that
now
I
wanna
it's
very
important
to
understand
that
you
know
prism
doesn't
require
mvvm.
You
can
use
code
behind
with
prism
if
you
want,
but
I
will
always
be
talking
about
nvvm
and
showing
you
mvvm,
because
it
it's
it's
all
about
separation
of
concerns
and
testability
we
get
commanding
this.
Is
your
delegate,
commands
and
composite
commands?
A
You
might
not
have
heard
of
a
composite
command,
but
the
composite
commands
are
pretty
cool
messaging,
so
this
is
like
we
have
what's
called
the
event
aggregator,
which
allows
you
to
have
like
a
publish,
subscribe,
messaging
system.
So
all
these
modules
that
we're
talking
about
when
I
was
talking
about
earlier,
I
can
actually
send
messages
to
these
modules
and
they
don't
even
have
to
reference
each
other.
So
if
I
have
two
modules
module
a
and
module
b,
I
can
send
a
message
from
a
to
b
with
no
reference
at
all.
A
They
don't
they
have
no
reference
to
each
other
and
I
can
communicate
between
them.
Probably
the
most
important
and
the
most
used
feature
in
prism
is
the
navigation
framework.
There's
a
number
of
ways
to
navigate,
but
region
navigation
is
king.
We
also
have
a
number
of
services
for
showing
dialogues.
Modularity
talked
about
that
separating
these
major
functional
areas
of
your
app
out
into
separate
projects,
and
then,
lastly,
the
probably
this
is
the
one
that
confuses
people.
The
most
is
dependency
injection
dependency.
A
Injection
is
a
concept
for
creating
loosely
coupled
applications
for
managing
dependencies.
A
You
know
so
you're,
never
newing
up
services,
they're
just
kind
of
given
to
you
and
I'll
briefly
touch
on
that
during
our
demo
very
quickly,
and
so
that's
all
the
slides
I
had.
I
I
think
it's
important
that,
with
the
time
I
have
remaining,
we
should
just
jump
in
and
start
writing
an
application
and
we'll
just
write
as
much
as
we
can
okay.
So
it's
important
that
you
ask
questions,
because
your
questions
will
help
drive
where
this
demo
goes.
Okay,
this
is
not
a
scripted
demo.
A
I
don't
know
what
I'm
gonna
write,
I'm
making
it
up
as
I
go
along,
so
the
easiest
way
to
get
started.
Writing
a
prism,
wpf
application
in
this
case
I'm
going
to
use
wpf,
but
prism
supports
xamarin
forms
and
uno
as
well.
A
So
if
you
want
to
write
uno
applications
or
same
informs
applications,
you
can
use
prism
for
that
in
this
demo,
I'm
going
to
use
wpf
just
because
it's
faster
okay,
so
the
first
thing
you're
going
to
want
to
do
is
you're
going
to
want
to
open
up
visual
studio,
go
to
manage
extensions
and
you're
going
to
want
to
search
for
what's
called
the
prism
template
pack,
it's
right
here.
A
Let
me
just
scroll
that
up
right
there
you're
going
to
want
to
install
this,
because
this
has
a
number
of
item
templates
and
project
templates
and
code
snippets
that
make
writing
prism
apps
just
easier
okay.
So
the
first
thing
I'm
going
to
do
is
I'm
going
to
create
a
new
project
and
this
project
is
going
to
be
a
prism.
Blank
app
will
do
net
core
and
I
will
call
this
my
prism
demo.
A
Now.
The
first
thing
that's
going
to
pop
up
is
you're
going
to
get
a
wizard.
You
know
kind
of
asking
for
your
container
now
this
kind
of
goes
back
to
the
di
stuff
right
I'll
touch
base
on
this,
but
for
now
I
recommend
dry
ioc.
It's
lightweight
and
fast,
there's
also
unity,
and
you
can
do
your
own
custom
container.
If
you
like,
but
out
of
the
box
dry,
ilc
and
ud,
are
supported,
get
a
question
here.
Pablo
hey
brian
maya,
ask
what
is
your
coffee?
A
I
don't
drink
coffee
at
all,
I
just
drink
water.
That's
all
I
drink.
Did
you
imagine
me
on
coffee,
that's
ridiculous!
Okay,
so
we
have
created
a
prism
application.
So
what
is
a
prism
application
really?
Well,
let's
just
take
a
look
at
our
app.xaml
and
really
the
only
difference
that
you'll
see
is
that,
instead
of
the
app.xaml
implementing
application,
this
is
now
a
prism
application
and
I
may
need
to
make
my
is
my
text.
Okay,
should
I
make
it
just
a
little
bigger,
maybe
like
115,
maybe
that.
A
Yeah
a
little
bigger
how
about
a
120,
I
hope
that's
global.
I
don't
have
to
keep
setting
that
for
everyone.
Okay.
So
now,
if
we
look
at
our
app.example.cs
now,
we
can
see
it's
a
little
more
different.
We
have
two
methods,
one's
called,
create
shell,
and
then
we
have
another
override
called
register
types.
Okay.
A
Now
I
briefly
mentioned
this
in
the
slides,
but
prism
has
this
concept
of
a
shell
and
a
shell
is
essentially
like.
I
said
it's
a
it's
a
master
page,
it's
it's
the
main
window,
app
of
the
application
that
we're
going
to
start
injecting
stuff
into
okay.
It's
we
don't
know
where
it's
coming
from.
The
shell
has
no
reference
to
anything,
but
we're
going
to
start
throwing
views
into
this
shell.
And
so,
if
you
look
at
our
shell,
it's
just
a
main
window
and
it
has
what's
called
a
region
in
it.
A
Now,
a
region
you
can
see
here,
prism,
region
manager,
region,
name,
equals
content
region.
All
I
have
done
here,
as
I
said,
hey
prism,
you
see
this
content
control
here,
yeah.
I
want
this
to
be
a
region,
and
that
means
that
I
want
to
be
able
to
add
content
to
this
content
control
dynamically
at
any
time.
A
You
have
no
idea
where
it's
coming
from
you
don't
know
when
it's
going
to
happen,
just
be
ready
for
it,
and
so
would
you
define
that
region
that
that
component,
that
controls,
in
this
case,
a
content
control
just
sitting
there
waiting
for
content?
Okay?
So
I'm
going
to
leave
this
here.
Okay
and
we'll
also
get
a
view
model
for
our
main
window,
and
it's
a
very
simple
v
model
has
one
one
property
here
called
title:
we're
setting
at
the
prism
application
and
it's
deriving
from
bindable
base.
A
This
is
just
a
base
class
in
prism
that
implements
identify
priority
change.
That's
it!
That's
all
it
does.
So,
if
you
look
at
this
property
here,
you
can
see
in
the
center
where
it
says
set
property.
This
is
from
bindablebass.
This
is
just
a
helper
method.
You
don't
have
to
use
this
in
your
applications.
It's
not
required
at
all,
so
omar
says.
A
lot
of
developers
says
the
size
is
very
big.
A
prism.
No,
the
size
of
prism
is
tiny,
tiny,
tiny
like
here.
A
A
Let's
open
this
up,
go
to
our
bin
debug
net
core,
so
prism
itself,
75
kb
present
for
wpf
245
kb,
and
then
you
have
the
dry
ic,
which
is
28
kb.
That
is
not
big
at
all,
especially
on
a
wpf
desktop,
app.
Okay,
so
prism
is
very,
very
lightweight.
Okay,
thanks
for
the
question
tomorrow
appreciate
that
okay.
So
this
is
the
view
model
now.
The
next
question
you're
gonna
have
is
whoa
whoa,
whoa
whoa.
How
does
the
view
model
get
applied?
So
I'm
gonna
run
this
application.
A
We're
just
gonna
see
what
happens
when
I
run
it
and
here's
it's
just
a
window.
It's
blank.
We
haven't
done
anything
but
here's
our
title
being
bound
in
our
main
window,
prism
application
right.
It
all
works
for
some
application,
but
if
we
look
at
our
view
model
or
excuse
me,
if
we
look
at
our
code
behind,
we
can
see
that
we're
not
setting
the
the
binding
excuse
me
the
data
context
to
the
window
right,
we're
not
saying
we're
not
doing
this.
A
We're
not
saying
data
context
equals
new
main
window
view
model
right,
we're
not
doing
that.
So,
how
is
that
view
model
being
set?
Well,
it's
being
set
by
this
attached
property.
It's
called
the
view
model
locator,
so
we
set
the
view
model
locator,
dot,
auto
wire
view
model
equals
true.
What
that
does?
Is
it
by
default,
uses
a
convention
that
says
hey
prism,
you
know
the
name
of
my
view.
A
It's
called
main
window
well
go
find
a
viewmodel
in
the
viewmodel's
namespace
called
main
window
viewmodel
create
an
instance
of
that
for
me,
assign
my
data
context
and
just
let
me
be
in
my
way
just
do
everything
for
me,
so
I
don't
have
to
worry
about
it
and
that's
exactly
what
it
does
so.
The
great
part
about
this
is:
it
uses
a
dependency
injection
container
which
I'll
talk
about
when
we
start
injecting
stuff
to
automatically
create
this
for
us
and
set
that
data
context
for
us
automatically
so
very
easy
to
do
now.
A
First
things.
First,
we
talked
about
you
know
the
composite
modular
experience.
You
know
breaking
these
big
applications
up
into
separate
projects
into
modules
and
we're
gonna
have
all
this
cool
stuff
just
happen
magically.
Well,
let's
do
that.
The
first
thing
I'm
going
to
do
is
I'm
going
to
create
a
module.
A
In
this
case
I
need
a
module.
Do
I
have
yeah,
so
I'm
going
to
create
a
prism
module.
This
is
part
of
the
prism
template
pack
for
net
core.
I'm
gonna
call
this
module
a.
I
don't
care
what
I
call
it
I'll
call
it
module
a
and
so
what
it's
going
to
do
is
it's
going
to
create
a
class
library
for
me
that
has
a
few
files
in
it,
the
first
one
being
a
class
called
module,
a
module
and
all
a
module
really
is
to
prism.
A
It's
a
class
that
implements
the
I
module
interface.
That's
all
it
is
okay,
so
the
template
pack
just
makes
it
easy
for
you
and
you'll
see.
This
interface
has
two
contracts
on
it.
It
says
uninitialized
and
registered
types,
we'll
kind
of
get
to
this.
Hopefully,
hopefully
we'll
have
time
to
really
get
into
di
all
right.
So
the
next
step,
oh
excuse
me,
and
we
have
a
view.
What's
this
views
this
view
say
anything
we
may
have
to
add
something
yep.
A
It
has
a
message
and
then
do
we
have
a
view
model
view
a
from
your
prism
module.
Okay,
perfect,
so
we
have
a
message
set
perfect.
So
what
I
want
to
do
is
now
we
have
to
let
the
prism
application
know
about
this
module
and
there
are
a
couple
of
ways
to
do
this
right.
A
One
way
is
just
through
code:
that's
what
I'm
gonna
do.
I'm
gonna
add
a
reference
from
the
main
executable
to
the
project.
Okay.
So
this
is
a
tight
coupling
on
the
module
side.
Now
you
don't
have
to
do
it
this
way,
you
can
actually
load
your
modules
from
a
directory
from
a
network
share.
You
can
use
an
app.config
file
to
load
your
modules.
You
can
use
a
xaml
file
to
load
your
modules.
So
if
you
want
a
more
loosely
coupled
like
this,
executable
really
has
no
idea
about
your
modules.
You
could
totally
do
that.
A
No
big
deal
okay,
so
we
we've
added
a
reference
to
our
module.
So
let's
go
back
to
our
I'm
gonna
close
that
and
I'm
keep
that
open.
Okay.
So
let's
go
back
here
now.
What
we
have
to
do
is
we
have
to
let
the
application
know
about
that
module.
So
I'm
going
to
override
configure
module
catalog
and
I'm
just
let
me
scroll
this
up,
so
everyone
can
see
so
I'm
going
to
say,
module,
catalog,
add
module,
module,
a
dot,
module,
a
module,
and
that's
all
I
did
okay.
A
So
now,
let's
do
something:
let's
hit
a
breakpoint
on
our
register
types
and
on
initialize
in
this
class.
Okay,
so
let's
let's
go
ahead
and
run
the
application.
We
have
let
prism
know
about
our
module
and
so
let's
run
the
application
boom.
Okay,
I
hit
a
breakpoint
on
the
register
types.
This
is
where
we're
going
to
register
any
of
our
services
and
types
with
our
container
for
this
module
and
then,
after
that,
odd
initializes
call
which
we
will
do
any
type
of
initialization
code
that
we
need
for
our
module.
A
A
A
Okay,
now
to
do
this,
we're
going
to
go
to
our
module,
a
module
class
and
now
we're
going
to
show
a
view
and
the
way
we
do.
This
there's
lots
of
ways
to
do
this,
but
I'm
going
to
show
you
the
coolest
way,
which
is
using
what's
called
region
and
navigation,
I'm
going
to
navigate
that
view
into
that
region.
A
To
do
that,
I
need
what's
called
the
I
region
manager,
so
I'm
going
to
start
by
creating
a
constructor
for
this
for
this
class
and
then
I'm
going
to
ask
for
the
I
region,
manager,
okay
and
I'm
going
to
add
a
field
to
store
that
off
on
now.
What
I'm
going
to
do
is
I
want
to
navigate
to
this
view,
but
but
before
I
do
that
I
have
to
I
have
to
do
something
that
prism
expects.
I
have
to
register
my
views
for
navigation
right.
A
A
What
this
does
is
it
registers
the
key,
the
name
of
the
view
view
a
with
the
container.
If
I
want
to
provide
a
custom
view
or
custom
name,
I
can
do
that.
My
name.
Essentially
it's
important
to
understand
that
navigation
at
prism
is
uri
based
it's
based
on
a
string.
We
we
don't
navigate
to
objects.
We
navigate
to
like
a
key
to
an
id
to
a
unique
identifier,
because
this
keeps
things
loosely
coupled
okay.
A
So
now
in
the
uninitialized,
I'm
gonna
say:
region
manager
request
navigate
name
of
the
region,
which
is
we
go
back
to
our
main
window.
We
can
see
that
our
our
region
name
is
content
region,
okay,
so
that's
the
name
of
the
region
and
then
we're
going
to
the
source.
What
are
we
navigating
we're
navigating
view?
A
okay?
Now,
if
I
did
say
my
name
here,
if
I
put
a
custom
name
in
here,
guess
what
I
can't
navigate
to
view
a
I
have
to
navigate
to
my
name.
A
Okay,
just
keep
that
in
mind,
but
for
the
most
part,
most
people
just
keep
it
default.
Okay,
so
let's
go
ahead
and
run
the
application
and
let's
see
what
happens.
A
Bam
check
that
out.
That's
our
module!
That's
our
review!
Okay,
so
we
have
successfully
injected
that
view
using
mvvm
and
all
that
stuff
into
the
region.
That's
defined
in
the
shell.
Without
ever
really
adding
anything.
All
we
said
is
hey
navigate
to
this
region.
This
view
you're
done.
That's
it!
Okay!
We
look
at
our
main
window.
This
is
all
that's
here.
There's
no
code
to
require
that
so
from
anywhere
in
my
application,
in
any
module,
I
can
inject
stuff
into
this
region
or
any
other
region
you're,
not
limited
to
regions.
A
A
A
A
As
long
as
the
container
knows
about
a
type,
all
you
have
to
do
is
ask
for
it
will
create
it
for
you
enough
that
type
has
any
dependencies
itself.
It
will
create
those
two.
So,
for
example,
nowhere
in
this
application
have
we
nude
up
any
view
right.
I
didn't
knew
up
this.
This
view
a
we
don't
have
any
code
in
here
that
goes.
A
A
All
I
have
to
do
is
ask
for
it.
I'm
going
to
run
the
application.
I
made
no
other
changes.
I
just
asked
for
this
and
look
it
gave
it
to
me.
I
have
an
instance
of
it.
It
created
the
instance
for
me
in
my
app
didn't
break.
I
changed
a
constructor
of
a
view
in
my
app
didn't
break
no
compile
errors,
nothing!
That's
because
we're
using
dependency
injection
to
resolve
our
objects,
so
the
prism
application.
A
You
see
this
register
types.
The
reason
we
have
the
prism
application
class
is
because
it
registers
a
number
of
types
for
us
right.
The
the
region
manager
is
registered,
like
all
the
services
that
prism
relies
on
is
registered
for
you
automatically,
so
you
can
just
use
them,
but
if
you
have
a
service
that
you
want
to
use
like
I
person
service,
that's
where
register
types
comes
in.
This
is
where
you
let
the
container
know
about
your
types.
A
That's
all
you're
really
doing
there.
Okay,
that's
all
that
is
you're,
just
letting
the
container
know
about
your
types.
Okay,
now,
let's
kind
of
get
into,
we
talked
a
little
bit
about
navigation
here.
What
do
we
do
now?
What
do
we
do
now?
A
Okay,
okay,
I
got
it.
How
much
time
do
I
have?
Oh
man,
you
did
not
give
me
a
lot
of
time.
My
friend
I
need
more
time.
Okay,
I
want
to
talk
about
some
of
the
other
features
that
we
have
first
off
continuing
on
continuing
on
navigation.
A
Let's
go
back
to
our
module
and
let's
talk
about
parameters
right.
I
want
to
pass
a
parameter,
let's
say
I'm
navigating
from
one
view
to
another
view
to
another
view
somewhere
in
the
application,
and
I
need
to
pass
parameters
to
my
views.
Well,
I
can
do
that
by
creating
a
new
navigation
parameters
class.
Let
me
scroll
up,
so
everyone
see
that
and
now
what
I
could
do
is,
I
could
add
a
new
parameter
say,
for
example,
message
all
right:
this
is
just
a
collection
of
a
key
value
pair.
My
message
is
hello:
parameter.
A
Okay,
but
it
doesn't
have
to
be
just
text
right,
I
could
pass
in
like
a
id,
I
could
pass
it.
I
don't
know
101
235
right.
It
could
be
an
object
that
you
want
to
pass
around
and
when
I
want
to
pass
this
parameter
to
the
view
like
in
this
case,
I
want
to
pass
it
to
view
a
I
just
pass
in
the
parameters
as
an
argument
here.
Okay,
so
now,
let's
talk
about
how
we
get
those
parameters,
let's
go
to
our
view,
a
view
model.
A
Here's
our
view
model
and
what
I
want
to
do
is
I
want
to
implement.
What's
called
I
navigation
aware
and
my
namespace
implement
the
interface
now,
there's
three
contracts
or
three
methods
on
this
interface
on
navigator2,
which
makes
some
sense
right,
unnavigated
from
and
then
is
navigation
target.
This
is
a
more
advanced
topic,
but
for
now
we'll
return
true
on
navigate
to
is
obviously
whenever
this
view
is
navigated
to
this
will
be
invoked
if
I'm
navigating
away
from
it,
unnavigated
from
will
be
a
vote
in
this
case.
A
What
I
want
to
do
is
I'm
expecting
a
parameter,
so
I'm
going
to
set
the
message:
property
equal
to
the
navigation
context
at
the
parameters
I'm
going
to
get
the
value
whoops
not
getting
numerator
hit
value.
This
is
of
type
string
because
we
have
to
cast
the
type
because
we
don't
know
what
the
type
is
message
right.
So
I'm
passing
the
message
as
a
parameter,
I'm
getting
that
parameter
and
I'm
going
to
use
that
as
the
message.
Instead,
let
me
drag
it
over.
A
There
is
boom
hello
parameter
right,
and
so
you
can
pass
as
many
parameters
as
you
want
go
at
it
knock
yourself
out,
okay,
but
that's
how
easy
it
is
to
pass
parameters
back
and
forth.
Another
thing
I
want
to
talk
about
is
the
more
common
things
that
you'll
have
to
deal
with
in
your
application.
Like
commands,
right
commanding,
is
kind
of
one
of
those
things
that
are
required
in
any
nvme
hold
on.
Let
me
take
a
breath
there.
We
go.
A
I
learned
how
to
drink
water
today,
okay,
so
what
I
want
to
do
is
I
now
I
want
to
talk
about
the
the
delegate
command,
delegate
command.
So,
let's
come
into
our
view,
I'm
going
to
change
I'm
going
to
change
this
to
a
stack
panel
and,
let's
add
a
button,
I'm
just
going
to
say
click
and
I
want
to
invoke
a
command
so
we're
going
to
create
we're
going
to
bind
to
a
command,
and
I
don't
know
what
we're
going
to
call
this
command
any
ideas
binding.
A
A
This
is
this:
is
a
code
snippet
in
the
prism,
template
pack
and
I'm
gonna
say:
do
something
command
whoop.
I
hate
it
when
visual
studio
does
that
right?
Okay,
so
now
we
have
a
do
something
command
and
all
this
is
going
to
do
it's
going
to
invoke
the
command
from
the
button
right.
The
button's,
gonna
click.
This
invoke
this
method.
Oh
louise,
can
the
parameter
be
a
easier
to
find
type
such
as
an
object?
Yes,
it
can
be.
A
So
in
this
case,
I'm
gonna
set
the
message
to
command
and
vote
all
right.
So
let's
do
something
real
quick.
This
is
really
basic
stuff
right.
So
what
a
delegate
command
allows
you
to
do
is
respond
to
user
interaction.
In
your
view,
in
your
view
model,
so
I'm
going
to
click
this
and
we
can
see
command
invoke.
So
we
clicked
the
button.
The
command
was
invoked
and
then
our
our
execute
do
something
command
method
was
invoked
in
response
to
that
right.
A
But
this
is
where
cool
stuff
happens.
This
is
where
prism
really
takes
off
so
I'mma
close
this.
I
have
too
many
too
many
windows
open
close
that
close.
That
okay,
let's
add
a
check
box.
A
Let's
add
a
check
box,
we're
gonna
say
this:
can
click
sure
can
click
sounds
good
and
then
is
checked.
We're
let's
create
another
binding
to
can
execute
or
oh
can
click.
Let's
just
call
it
can
click.
A
A
A
A
Maybe
that'll
help
like
that
bring
this
one
down
there.
We
go,
I'm
going
to
generate
that
method,
and
here
I'm
going
to
return
and
click
right.
So
this
basically
says
am
I
allowed
to
invoke
this
command?
Yes
or
no,
so
what
I
want
to
happen
is
whenever
they
can
click
property
changes
right.
I
want
to
basically
determine
if
I
can
click
this
command
or
not.
A
So
let's
run
this
and
just
kind
of
see
what
happens
it's
over
so
right
now,
because
can
click
is
false?
The
button
is
disabled.
I
can
click.
So
what
I
want
to
do
is
hit
check
it
and
say:
yes,
I
can
click
it,
but
the
button
is
still
not
enabled
like
okay,
what's
going
on
here
now
in
a
lot
of
command
implementations
like
there's
a
popular
mvvm,
light
relay
command,
this
kind
of
happens
automatically
and
that's
because
it
hooks
into
the
command
manager
in
wpf.
A
However,
prism
doesn't
do
that,
because
that
is
a
bad
decision.
A
reason
to
bad
decision
is,
the
command
manager
will
will
re-query
but
can't
execute
multiple
times
all
the
time
you
have
no
control
over
it
right.
This
means,
if
you
have
logic
that
maybe
checks
a
database
or
checks
permissions
or
has
any
type
of
code,
substantial
code
to
make
a
decision.
A
You
are
creating
one
heck
of
a
performance
hit
in
your
application,
so
instead
prism
makes
you
makes
you
manually
raise
those
events.
So
what
I'm
going
to
do?
I'm
going
to
show
you
one
way
to
do
that?
One
way
is
right
here
at
the
center
of
the
button,
I'm
going
to
say:
hey
do
something
command
raise,
can
execute
change.
I
basically
saying
hey
after
this
value
is
set,
raise
the
canned
execute
change
of
this
command,
which
is
going
to
reevaluate.
The
can
click
to.
A
Open
up
on
this
window,
I'm
gonna
click
the
button
boom.
It's
enabled
I
can
now
click
it
command,
invoked
unclick.
It
awesome,
that's
beautiful
beautiful,
but
I
don't
like
this.
I
personally
don't
like
this,
because
I
don't
really
like
having
dirty
setters.
What
I
mean
by
dirty
setters
is
having
code
in
my
setters
on
my
objects.
A
A
And
click,
what
I'm
doing
is
I'm
using
a
method
off
of
the
delegate,
command
called
observes
property
and
I'm
providing
the
can
click
property.
So
what's
going
to
happen,
is
prism's
going
to
say?
Oh,
oh,
you
want
me
to
observe
this.
Can
click
property?
Okay,
I
tell
you
what
time
the
can
click
value
changes.
A
I
will
automatically
raise
the
canned
execute
changed
other
command
for
you
automatically
right.
You
don't
have
to
do
anything.
Just
just
sit
back.
I
got
this.
I
got
this
all
right,
so
here's
the
same
app
can't
click
buttons
enabled
I
can
click
it.
I
can
unclick
it
same
behavior,
except
now
we
don't
have
to
have
code
in
our
centers.
We
could
just
tell
the
command
to
listen
for
changes
on
that
on
that
on
that
property,
and
you
could
do
more
than
one
property.
Oh,
I
can
observe
another
property.
A
I
can
observe
another
property,
I
can
observe
another
property
right,
and
so
you
can
observe
multiple
properties
at
any
time.
A
value
in
those
properties
changes
but
can
execute,
will
automatically
be
raised
on
this
command.
A
Now
you
can
also
like,
for
example,
let's
say
I
had
a
person
object
right,
you
can
you
can
dock
into
you
can
have
a
complex
property.
So
if
you
did
have
a
person
object
defined
in
here,
a
person
property
and
it
had
a
property
you
wanted.
I
could
say:
oh
yeah
person,
dot
property
name
right.
You
could
totally
do
that.
A
Oh
I
know
I
know
what
you're
thinking
you're
like
brian,
that's
freaking,
awesome.
You
blew
my
mind.
Like
that's
awesome,
you
know
what
I
think
we
can
do
better.
I
really
think
we
can
do
better.
So
looking
at
this
property,
it's
just
a
boolean
that
says:
can
I
click
the
button
or
not
right?
It's
a
very
simple
check.
A
Well
that
got
me
thinking
it's
like!
Well,
you
know
what
the
delegate
for
a
can
execute.
Look
here
is
a
boolean,
so
why
should
I
have
to
define
a
method
just
to
return
a
property?
It
makes
no
sense
to
me.
So
what?
If
we
did
this?
What
if
I
deleted
the
can
execute
delegate
right?
So
let's
delete
this
now.
What
I'm
going
to
do
cut
observes
can
execute.
A
D
A
What
yes,
let's
run
the
application
and
see
how
it
functions?
That's
amazing!
Right!
So
here's
the
same
app.
I
can
click
the
button.
I
check
the
the
check
box.
I
mean
buttons
enabled
I
can
click
the
button.
I
can
uncheck
it.
It
works
the
exact
same
except
this
time.
We've
cleaned
our
code
up
right,
we've
cleaned
it
up.
I
don't
have
to
have
extra
methods
for
can
execute
because
it's
a
simple
boolean.
It
doesn't
make
sense
like
just
let
me
provide
the
property
itself
right.
A
A
B
Can
you
use
prism
for
something
like
xamarin,
just
an
idea.
A
Yes,
you
can
most
definitely
use
prism
for
xamarin
forms,
wow,
not
native
xamarin,
but
xamarin
forms.
However,
I
will
say
so:
prism
has
three
packages:
okay,
it
has
the
prism
core,
you'll,
have
a
platform,
specific
version
like
prism.wpf
or
xamarin
forms
or
uno,
and
then
you'll
have
a
container
package
like
whatever
container
you're
using.
So
when
I
say
container
remember
when
I
was
explaining
hey
look,
I
just
asked
for
this
and
they
gave
it
to
me.
A
Well,
the
container
did
that
for
me,
and
so
in
this
case
I'm
using
dry
ioc,
but
some
people
like
unity.
I
used
to
use
unity
a
lot,
so
it's
those
three
main
packages:
okay,
but
the
prism
dot
core
package
which
contains
the
event
aggregator,
and
it
also
contains
the
commanding
and
stuff
like
that-
that
isn't
a
core
dot-net
standard
assembly
which
could
be
used
in
anything
anything.net.
You
can
use
that
in.
I
use
the
event
aggregator
in
blazer,
just
as
an
experiment,
yeah,
and
so
I
have
I
have
about
10
minutes
left.
A
Let's
say
that
when
I
click
this
button,
I
want
to
communicate
with
another
part
of
the
application.
A
So
let's
open
up
our
main
window,
I'm
gonna.
Let's
add,
let's
add
something
I
need
to
add
a
text
block
here
and
we'll
set
the
speaker
to
a
binding
of
something
we'll
call
it
message.
Don't
let
me
forget,
I
call
that
message.
A
That's
all!
I
need
okay.
So
now,
let's
talk
about,
how
do
we
communicate
loosely
couple
communicate
from
like
view
model
to
view
model?
Okay
to
do
this
we're
going
to
we're
going
to
use
what's
called
the
event
aggregator?
Okay,
so
I'm
going
to
start
just
by
creating
a
new
class.
A
Actually,
let's
not
start
by
doing
that,
I'm
getting
ahead
of
myself.
So
what
is
the
event
aggregated
the
event?
Aggregator
is
a
publish,
subscribe,
communication
eventing
system,
so
it
lets
me
communicate
or
send
messages
from
one
or
more
views
or
view
models
or
objects
or
classes
to
other
views,
view
models
and
objects
and
classes
right
and
to
use
this,
the
first
step
is:
we
have
to
have
an
event,
okay,
and
in
this
case
I'm
just
going
to
create
it
in
here
I'm
going
to
create
a
new
class.
A
I
will
call
this
class
like
I
don't
know
what
message
event
that
sound
good
to.
You
sounds
good
to
me
message
event,
and
this
is
going
to
be
a
public
class
at
implement
or
derives
from
pub
sub
event
of
t
whoops.
This
one
okay
and
a
pub
sub
event
is
the
event
type
of
prism.
The
t
is
the
payload.
So
when
I
send
a
message
or
send
an
event
of
any
type,
I
can
send
a
payload
with
it,
and
this
string
in
this
case
represents
the
type
of
the
payload
I'll
be
sending.
A
But
if
you
had
like
a
person,
object,
you'd
say
like
pub
sub
event
person,
because
I'm
going
to
send
a
person
payload
with
this
event.
So
now
that
I
have
the
event
defined,
I
need
to
send
a
message.
So
let's
send
a
message
to
do
that,
I'm
going
to
ask
for
the
I
event
aggregator
at
our
using
statement
right,
let's
create
a
field,
oh
when
our
message
is
when
this
is
evoked
invoked
right.
A
Once
I
get
the
event,
I'm
going
to
publish
it
and
I'm
going
to
send
a
payload
with
that
in
this
case,
I'm
going
to
send
the
message
that
we
that
we
clicked
on-
or
you
know
what?
Let's
not
do-
that
let's
do
a
custom
message.
Let's
do
I
sent
a
message
all
right,
we'll
do
that.
I
see
a
question:
can
we
use
prism
and
uwp
too
only
if
we're
using
uno
only
if
you're
using
uno
prism
does
not
currently
have
a
uwp
specific
package?
A
Okay,
but
you
can
use
the
event
aggregator
and
stuff
like
that
in
there
anything
from
core
you
can
use
all
right.
So
that's
all
it
is
so
I
got
the
event
right.
I
said
event
aggregator
give
me
the
mess,
get
me
this
message
event
and
I'm
going
to
publish
this
now
that
we
publish
this
event.
I
need
a
subscriber
to
this
event.
So
let's
go
to
our
main
window
view
model,
and
what
did
I
call
this?
I
called
it
message.
Okay,
so
let's
create
a
new
property
here,
a
string
message
now
same
thing.
A
A
Now
these
these
events,
if
they're
shared
across
multiple
modules,
you'll
normally
put
it
in
like
some
type
of
infrastructure
or
core
project,
so
like
I'd,
have
like
my
prison
demo,
dot
core
assembly
and
that's
where
all
my
shared
stuff
would
go,
but
what's
a
good
event
we're
going
to
subscribe
and
what
we
call.
This
message
received.
A
So
here's
our
our
checkbox
I'ma
click
that
oh,
my
computer
froze,
don't
freeze
on
me.
A
A
Oh,
I
know
sorry
when
I
created
this
tech
block
text
text
block.
I
actually
put
it
on
top
to
set
a
margin
of.
Like
I
don't
know
a
hundred
there
we
go.
A
The
text
block
is
sitting
on
top
of
the
check
box,
so
I
couldn't
check
it
there.
We
go
okay,
so
now
I'm
gonna
click
this
button,
it's
going
to
send
to
the
event
and
there's
our
text
block
that
received
the
event,
took
our
message
and
displayed
it
right.
So
I
know
that's
a
very
simplified
example,
but
that
allows
us
to
send
messages
all
throughout
our
application,
using
the
event
aggregator
and
what's
really
cool
about
this,
is
you
can
even
filter
events
right?
You
can
create
event
filters.
A
You
can
choose
how
you
subscribe
to
event.
So
where
did
I
sub
to
that
here?
Was
it
here
yeah?
So
we
have
actions
for
like
so
by
default,
the
event
aggregator
uses
weak
references,
meaning
that
you
don't
have
to
worry
about
unsubscribing
or
anything
like
that.
It
just
it
handles
it.
For
you
automatically,
however,
you
can
choose
to
have
a
strong
reference
by
keep
subscribers
alive
right.
You
can,
but
if
you
do
that
you
will
have
to
manually
unsubscribe.
A
You
also
have
a
thread
option.
You
know:
do
you
want
to
publish
this
or
subscribe
to
this
on
the
background
thread?
The
publisher
thread
the
ui
thread.
So
there's
a
lot
of
cool
little
features
within
the
event
aggregator
itself.
Okay,
so
that's
pretty
simple.
I
mean
the
event
aggregator
is
is
pretty
straight
forward
and
honestly,
that's
that's
my
time,
I'm
out
of
time
and
I
have
so
much
more
cool
stuff
to
talk
about,
but
that's
all
I
have
time
for
right
now.
So
any
any
questions
want
to
come
through.
A
I
can
answer
those
but
other
than
that
yeah.
That's
it
buzzer.
B
Thank
you
so
much
brian
yeah
for
the
audience.
Please
feel
free
to
give
your
questions
to
to
to
to
brian
no
brian
I
was.
I
was
thinking
that
that
by
this
time
it
would
be.
You
know
it
it.
It's
almost
9
p.m.
Here
in
manila
I
would
be,
I
would
be
sleeping
everything,
but
but
man,
your
your
energy,
is
just
infectious.
B
B
B
Good
for
you
all
right,
oh
so
so
if
there
are
any
more
questions
from
the
audience,
I
just
would
like
to
ask
them
with
all
right,
nothing's
coming
true
at
this
point,
but
yeah.
That
was
that
that
was
such
an
awesome
presentation.
You
know
I
have
not
touched
wpf
for
a
long
time,
and
and
yeah
and
you're
in
in
this
presentation
has
made
me
excited
to
try
and-
and
you
know,
get
my
hand
on
it
again.
B
I
mean
even
just
that
that
that
observes
property
thing
that
had
been
my
pet
peeve
with
wpf
having
those
dirty
setters
property
on
property
change.
Events
on
those
on
those
setters
is
always
annoying.
So
that
was
a
great
the
that
that's
something
great
that
I
picked
up
from
your
talk.
A
A
You
know
I
was
like.
I
forget.
I
forget
all
right.
Oh
dave,
notre
hey
dave,
they've
asked
the
questions
like
hey,
says
great
job
right
appreciate
it.
My
friend,
where
else
can
we
see
you
well,
like
I
said
the
easiest
places
on
twitter.
A
However,
you
know
my
youtube
channel,
just
youtube.com
brianlagoonis
and
then
twitch
twitch
tv
slash
brian
lagunas,
so
I
and
actually
I
live
stream
today.
I'll
be
live
streaming,
but
you
guys
will
be
asleep
by
then
yeah
I'll.
B
Four
more
hours
yeah,
so
so
that's
probably
what
one
am
ours
all
right,
which
is
why,
which
is
why
we're
so
thankful
that
that
that
you
spent
your
time
with
us
very
early
in
the
morning.
Thank
you
so
much.
We.
We
appreciate
that
and
and
and
yeah
that
was
such
a
great
presentation.
So
thank
you
very
much,
brian
virtual
clap.
Everyone.
Thank
you.
So
much
all
right.
A
A
Go
yeah
got
a
question:
luis
is
asking
hey:
what's
the
roadmap
for
maui,
any
huge
changes
expected
so
no
huge
changes,
but
we
do
expect
maui
support
whenever
maui
is
available.
However,
you
know,
maui
has
been
pushed
out
to
like
2022
or
something
like
that
so
yeah
and
do
you
happen
to
know
how
prism
got
its
name?
A
So
when
prism
was
first
started
with
the
with
the
microsoft
patterns
of
practice
team
way
back
in
the
day
they
named
it
and
it
was
there's
no
special
story
behind
it.
It's
just
they.
You
know
they're
thinking
about
how
how
all
the
pieces
come
together,
because
back
then
it
was
called
the
composite
application
block.
A
I
don't
know
if
you
remember
all
the
application
blocks
that
the
pnt
pnp
team
had
back
in
the
day
the
logging
application
block
right,
the
application
update
application,
like
all
these,
all
these
different
applications
yeah,
and
so
this
was
just
part
of
it
and
yeah.
They
just
thought
about
how
everything
kind
of
meshes
together
and
it's
just
a
prism
of
all
this
functionality.
B
A
B
All
right,
thank
you,
okay,
so
I
guess
we're
at
the
end
where
we're
we're
out
of
time
we're
at
the
end
of
our
event.
So
I'd
like
it
just
like
to
to
to
thank
everyone,
who's
been
here.
I
think
we
did
we're
not
limited
to
do
to
audiences
from
from
manila
or
even
just
the
philippines,
or
somebody
who
who
said
they
were
from
from
tanzania,
and
I
could
see
a
few
more,
a
few
more
nationality
names
you
know
from
from
other
asian
countries.
So
thank
you
very
much.
B
Thank
you
very
much
for
for
for
being
here.
In
this
event,
please,
I
I
guess
just
just
as
a
reminder:
please
subscribe
to
our
meetup.com
page
meetup.com,
phoenix
and
yes
subscribe
to
our
our
twitter
account.
B
This
twitters.com
phoenix
as
well
and
same
just
just
search
for
phoenix
and
facebook
feel
free
to
join
our
our
facebook
group
and
and
and
subscribe
to
our
facebook,
page
and
and
yeah
we're
working
on
our
final
website
again
with
blazer,
and
that's
something
that
I
will
be
there
that
we
will
be
ready
to
announce
in
a
few
months
time,
all
right.
So
again,
this
is
this
is
john
and
I'm
the
head
of
phoenix.
Thank
you
so
much
for
being
here.
B
I
know
it's
already
late
for
the
people
in
manila
and
appreciate
that
everyone
who
had
stayed
the
full
two
hours
great
talks
from
her
from
rocky
lotka
and
great
a
great
talk
from
brian
lagunas
and
and
all
that
energy.
This
is
awesome
and
and-
and
we
hope
to
be
able
to
do
to
bring
you
more
as
to
2021
goes
before
I
forget.
I
would
also
like
to
thank
the.net
foundation
for
for,
for
hosting
us.
B
The
dave
notre
luis
beltran
who's
co
hosting
this.
The
this
event,
thank
you
so
much
for
for
for
helping
us
conduct
this
event,
and
we
will
be
back
next
month
with
with
more
events
from
fino.
We
hope
to
be
able
to
continue
this
as
we
go
along,
so
so
wait
up,
yeah
subscribe
to
our
meetup.com,
so
that
you
know
what's
lined
up
next
yep,
so
yeah
again.
Thank
you.
This
is
john
and.