Radical Documentation
View on GitHub
release-1
release-1
  • Home
  • Presentation
    • AbstractViewModel
    • Conventions
      • Bootstrap Conventions
      • Runtime Conventions
      • Conventions override
    • Commands and DelegateCommand
    • IViewResolver
      • Default view behaviors
      • view life cycle events
        • Callback expectations
        • notify messages
    • Message broker MVVM built-in messages
    • Application boot process demystified
      • Application shutdown
      • Singleton applications
    • AbstractMementoViewModel
      • Simple ViewModel graphs
      • Collections and complex ViewModel graphs
    • Validation and Validation Services
  • UI Composition
    • UI Composition
      • Region content lifecycle
      • TabControl region
      • Create a custom region
  • Concepts
    • Inversion of Control
      • Castle Windsor
      • Autofac
      • Unity (v2 & v3)
      • Puzzle Container
    • Entities
      • Property System
    • Messaging and Message Broker
      • POCO messages
      • Standalone message handlers
    • Observers
      • PropertyObserver
      • MementoObserver
      • BrokerObserver
  • Memento
    • Change Tracking Service
      • MementoEntity and MementoEntityCollection
      • Handling change tracking:
        • Simple model
        • Collections
        • Complex objects graph
      • Atomic operations
      • Change Tracking Service API
      • Property Metadata for the ChangeTrackingService
      • Handling collection sync
  • Behaviors
    • DataGrid Behaviors
    • Password
    • Generic routed event handler to command behavior
    • Overlay adorner
      • Busy status manager
    • TextBox behaviors:
      • Command
      • Auto select
      • DisableUndoManager
  • Markup Extensions
    • Editor binding
    • Auto Command binding
  • How to
    • Get the view of a given view model
    • Bi-directional communication between different windows/views
    • Handle the busy status during async/long running operations
    • Implement a customer improvement program
    • Manage focus
    • Create a splash screen
    • Access view model after view is closed
    • Intercept ViewModels before it's used
Powered by GitBook
On this page
  • MVVM and UI Composition quick start
  • Windows Presentation Foundation
  • Release management process
  • Contribution guideline
  • A note on versioning
  • Samples
  • MyGet unstable feed

Home

NextAbstractViewModel

Last updated 5 years ago

MVVM and UI Composition quick start

Windows Presentation Foundation

Steps to bootstrap your project in 3 minutes

  • Create a new Visual Studio solution with a WPF application project;

  • Add, using nuget, a reference to: ;

    • this will give us the full Radical Presentation stack with the default Castle Windsor support as IoC/DI container;

  • Delete the default MainWindow.xaml;

  • Edit the app.xaml file to remove the StartupUri attribute;

  • Add a “Presentation” folder to the project;

    • Presentation is the default location, based on a convention, where Radical Presentation looks for views and view models;

  • Create 2 new items:

    • A WPF window named MainView.xaml (*View is important for the default conventions);

    • A class MainViewModel (<ViewName>ViewModel is important for the default conventions);

  • In the app.xaml.cs add a single line of code:

public partial class App : Application
{
   public App()
   {
      var bootstrapper = new WindsorApplicationBootstrapper<Presentation.MainView>();
   }
}

Press F5 and you are up & running: the MainView window will be shown.

The application boots, all the default and required services (for MVVM and UI Composition) are wired into Castle Windsor, the MainView is designed as the main window, at boot time the MainView is resolved and using the conventions engine the MainViewModel is setup and set as the DataContext of the MainView, in the end the MainView is shown.

What’s next

Release management process

Radical follows a set of rules to prepare and publish releases:

  • Define the milestone;

  • Define an issue for everything that gets touched:

    • the initial issue comment must be as descriptive as possibile;

    • the first 30 lines of the first issue comment will be included by default in the release description;

    • to include a different amount of lines add a HR (--) to the issue first comment;

    • the issue must be labeled at least with one, and only one, of the following labels: Bug, Feature, Improvement;

  • Associate the issue to the milestone;

  • Associate a commit with an issue and close it;

  • Publish the release associated to the milestone;

Contribution guideline

  • If you find a bug, please raise it as an issue, even better followed by a pull request.

  • Please rebase your code on top of the latest commits. Before working on your fork make sure you pull the latest so you work on top of the latests commits to avoid merge conflicts. Also before sending the PR please rebase your code as there is a chance there have been new commits pushed after you pulled last.

  • We will only merge PR that could be automatically merged.

A note on versioning

Radical follows the following versioning scheme:

major.minor.patch-extensions.version

major           - version when you make incompatible API changes.
minor           - when you add functionality in a backwards-compatible manner.
patch           - when you make backwards-compatible bug fixes.
extensions      - pre-release extensions
version         - pre-release version

Samples

All samples are constantly under heavy development and are also used to test Radical features.

MyGet unstable feed

Radical uses MyGet to publish unstable releases during development, to use the unstable feed:

  • create a nuget.config file in the same folder as your solution folder

  • add the following content to the configuration file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageRestore>
    <clear />
    <add key="enabled" value="True" />
    <add key="automatic" value="True" />
  </packageRestore>
  <packageSources>
    <add key="nuget.org" value="https://www.nuget.org/api/v2/" />
    <add key="Radical Unstable" value="https://www.myget.org/F/radical-unstable/api/v2" />
  </packageSources>
  <disabledPackageSources />
  <config>
    <add key="DependencyVersion" value="HighestMinor" />
  </config>
  <activePackageSource>
    <clear />
    <add key="All" value="(Aggregate source)" />
  </activePackageSource>
</configuration>
  • close and reopen the solution

By going to the Manage Nuget Packages page of your solution, you'll now see a "Radical Unstable" option in the source selection dropdown. Do not forget to check the "prerelease versions" checkbox search setting.

The best topic to read now is basic .

Use to commit changes;

This routines allows us to be able to auto-generate , trying to be compatible with the using a .

Your contributions to Radical are very welcome. If you find a bug, please raise it as an issue. Even better fix it and send a pull request. If you like to help out with existing bugs and feature requests just check out the list of and grab and fix one:

If you like to help out with existing bug and feature, just check out the list of and grab and fix one.

This project uses for pull requests. So if you want to contribute, fork the repo, create a descriptively named branch off of master (ie: portable-class-library-support), fix an issue, run all the unit tests, and send a PR if all is green.

We use the following :

Check the for the version history of all the Radical's packages.

The Radical source code includes several samples that are divided per scope and technology, samples are available in the documentation repository:

Radical.Windows.Presentation.CastleWindsor
concepts about the ViewModel
GitHub Flow
release notes
Semantic Release Notes
release notes compiler
issues
issues
GitHub flow
semantic versioning policy
Release pages
https://github.com/RadicalFx/documentation/tree/master/samples