Hello World - how does it work?
Important
This project is an experimental release. We hope you try out Experimental Mobile Blazor Bindings and provide feedback at https://github.com/xamarin/MobileBlazorBindings.
Note
This page is a continuation of the Build your first app walkthrough. We recommend you complete that walkthrough before continuing.
Let's take a look at the initial project that was created in the previous walkthrough to understand more about how to use Experimental Mobile Blazor Bindings.
The main project to look at is the shared project that contains the .razor
files. The Android and iOS projects don't contain any code specific to Experimental Mobile Blazor Bindings.
These are the files in the shared project:
_Imports.razor
- Contains common directives that are applied to all other.razor
files in this folder and its sub-folders. Sub-folders can have their own_Imports.razor
files with additional directives. The most common directive type in this file is the@using
directive, which is used to import a namespace into.razor
files, exactly the same as a C#using
statement.App.cs
- Contains the main UI entry point of the application, represented by a class that derives from theXamarin.Forms.Application
base class. The constructor of this class instantiates a Generic Host, adds services to the host (the default project has none), and then uses the host to add a Blazor component namedHelloWorld
to the application element (this
).Counter.razor
- Contains a Blazor Component namedCounter
.HelloWorld.razor
- Contains a Blazor Component namedHelloWorld
.
Let's dive into the two Blazor Components to see how they work.
Counter Blazor Component
This component contains two sections:
The markup that defines the UI elements and their associated properties and event handlers:
<Frame CornerRadius="10" BackgroundColor="Color.LightBlue"> <StackLayout Orientation="StackOrientation.Horizontal" HorizontalOptions="LayoutOptions.Center"> <Button Text="Increment" OnClick="IncrementCount" /> <Label Text="@("The button was clicked " + count + " times")" FontAttributes="FontAttributes.Bold" VerticalTextAlignment="TextAlignment.Center" /> </StackLayout> </Frame>
The HTML-like tags represent UI components that match the Xamarin.Forms components and their properties and events. Some properties have computed values, such as the
Label
component'sText
property, which has its value set to a value computed by C# code, which is denoted by the@( ... )
expression block.When an event handler is run, such as the
Button
component'sOnClick
event, the component automatically re-renders, which enables the UI to update without any additional logic. More advanced scenarios can control which components re-render and when.The code that implements any event handlers or other component functionality, wrapped in an
@code { ... }
block:int count; void IncrementCount() { count++; }
This code increments the
count
field, which is also used as the computed value of theLabel
component'sText
property. After theIncrementCount()
event handler is run, the new value ofcount
will be used when the UI re-renders.
HelloWorld Blazor Component
The HelloWorld component contains only markup:
<ContentView>
<StackLayout Margin="new Thickness(20)">
<Label Text="Hello, World!"
FontSize="40" />
<Counter />
</StackLayout>
</ContentView>
Note that the Counter
component is referenced in this component by referencing it as a tag <Counter />
.
Every Blazor Component is compiled into a class with the same name as the file. The namespace is the root namespace of the project, plus the folder names, if any, separated by dots (.
). The type can be referenced by other C# code via its type name (not common), or in a .razor
file by using it as a tag.