Skip to content
Develop cross-plattform MVU GUI Applications using F# and Avalonia!
Branch: master
Clone or download
JaggerJo Add missing attached properties (#5)
* separate properties, attached properties, events

* add most attached properties

* change margin & padding back to zero
Latest commit 25adffe Jun 23, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
github/img change nuget package id and add package icon Jun 21, 2019
src Add missing attached properties (#5) Jun 23, 2019
.gitattributes clean Jun 20, 2019
.gitignore clean Jun 20, 2019
LICENSE clean Jun 20, 2019
README.md Update readme to include Nuget and Wiki links (#3) Jun 21, 2019
azure-pipelines.yml clean Jun 20, 2019

README.md

Avalonia.FuncUI

Build Status

Develop cross-plattform MVU GUI Applications using F# and Avalonia!

About

This library allows you to write cross-plattform GUI Applications entirely in F# - No XAML, but a declarative elm like DSL. MVU (Model-View-Update) architecture support is built in, and bindings to use it with Elmish are also ready to use.

Current State

Should be usable, but expect bugs and some breaking changes. Basically wet paint.

Contributing

Please contribute to this library through issue reports, pull requests, code reviews and discussion.

Getting started

Avalonia.FuncUI nuget

Install-Package JaggerJo.Avalonia.FuncUI

Avalonia.FuncUI.Elmish nuget

Install-Package JaggerJo.Avalonia.FuncUI.Elmish

Project templates will follow soon.

For now check out the Wiki (WIP) and Examples.

Example

Below is the code of a simple counter app (using the Avalonia.FuncUI.Elmish package).

module Counter =

    type CounterState = {
        count : int
    }

    let init = {
        count = 0
    }

    type Msg =
    | Increment
    | Decrement

    let update (msg: Msg) (state: CounterState) : CounterState =
        match msg with
        | Increment -> { state with count =  state.count + 1 }
        | Decrement -> { state with count =  state.count - 1 }
    
    let view (state: CounterState) (dispatch): View =
        Views.dockPanel [
            Attrs.children [
                Views.button [
                    Attrs.click (fun sender args -> dispatch Increment)
                    Attrs.content "click to increment"
                ]
                Views.button [
                    Attrs.click (fun sender args -> dispatch Decrement)
                    Attrs.content "click to decrement" 
                ]
                Views.textBlock [
                    Attrs.dockPanel_dock Dock.Top
                    Attrs.text (sprintf "the count is %i" state.count)
                ]
            ]
        ]    
You can’t perform that action at this time.