Windows Store MVVM Template
A bare bones starter template for Windows Store 8.1 Projects that Utilizes the Model View View Model Pattern
You can download the template from the Visual Studio Extension Gallery
You can fork or contribute to the template on github.com/KyleMit/WindowsStoreMvvmTemplate
Directory #
Here's a breakdown of the directory structure:
- Assets: contains images for the
Package.appxmanifest
- Model: contains core business logic for the application
- Resources: contains common resources for the whole application
- AppResources.xaml: contains xaml resources that is added to App.Resources
- Utilities: contains reusable helper classes that can be used in this, and other, projects.
- BindableBase.vb: implements
INotifyPropertyChanged
which can be inherited by classes in you ViewModel - NavigationHelper.vb: adds Navigation support and Process Lifetime Management
- RelayCommand.vb: implements [
ICommand
] iCommand to help invoke delegates through binding. - SuspensionManager.vb: captures global session state to simplify process lifetime management
- BindableBase.vb: implements
- View: contains views for the User Interface layer of the application
- MainView.xaml: has the initial window that the application launches
- ViewModel: contains classes which help communicate between the View and the Model
- MainViewModel.vb: contains the business logic for
MainView.xaml
- MainViewModel.vb: contains the business logic for
- App.xaml: contains resources scoped to the entire application
- App.xaml.vb: contains startup code for the application
Samples #
Binding #
MainView.xaml #
<TextBox Text="{Binding PersonName}" />
MainViewModel.vb #
Private _personName As String
Public Property PersonName As String
Get
Return _personName
End Get
Set(ByVal value As String)
SetProperty(_personName, value)
End Set
End Property
MainViewModel.cs #
private string _propertyName;
public string PropertyName {
get { return _propertyName; }
set { SetProperty(ref _propertyName, value); }
}
Commands #
MainView.xaml #
<button content="Say Hello" command="{Binding SayHelloCommand}" />
MainViewModel.vb #
Public ReadOnly Property EnterNameCommand As RelayCommand
Get
If _enterNameCommand Is Nothing Then
_enterNameCommand = New RelayCommand(Async Sub() Await EnterName())
End If
Return _enterNameCommand
End Get
End Property
Private Function EnterName() As Task
'do awaitable stuff here
End Function