Catel
Catel is an application development platform with the focus on MVVM (WPF, Universal Windows Platform, Xamarin.Android, Xamarin.iOS and Xamarin.Forms). The goal of Catel is to provide a complete set of modular functionality for Line of Business applications written in any .NET technology, from client to server.
Catel distinguishes itself by unique features to aid in the development of MVVM applications and server-side application development. Since Catel focuses on Line of Business applications, it provides professional support and excellent documentation which ensures a safe bet by professional companies and developers.
Major features
Below are a few major features that are available in Catel.
Catel.Core
Catel.Core is the library you want to include in all your projects, whether you are writing a UI project or not. It contains lots of useful helper methods. The most important features are listed below:
- Argument validation (e.g.
Argument.IsNotNull(() => myArgument)
) - Caching
- Data (ModelBase, PropertyBag, Validation)
- IoC (ServiceLocator, TypeFactory)
- Logging (LogManager, Log, several log listeners)
- Messaging
- Reflection (same reflection API for every supported platform)
- Serialization (BinarySerializer, XmlSerializer and more)
- Weak references (WeakEventListener)
And more….
Catel.MVVM
Catel.MVVM is the library you want to include when you are writing a UI project (e.g. WPF, UWP, Xamarin) and you want to use the MVVM pattern. Catel is the only MVVM library that has context-aware view and view-model creation, which can be used to solve the nested user controls problem.
The most important features are listed below:
- Auditing
- Collections (FastObservableCollection)
- Commands (Command, TaskCommand, etc)
- Converters (tons of converters out of the box)
- Services
- CameraService
- LocationService
- MessageService
- NavigationService
- OpenFileService
- PleaseWaitService
- SaveFileService
- UIVisualizerService
- View models
- Automatic validation
- Automatic mappings from model to view model
- Views
- DataWindow
- UserControl
- Window
Example code
Models
This model has automatic change notifications and validation.
public class Person : ValidatableModelBase
{
public string FirstName { get; set; }
public string LastName { get; set; }
protected override void ValidateFields(List<IFieldValidationResult> validationResults)
{
if (string.IsNullOrWhitespace(FirstName))
{
validationResults.Add(FieldValidationResult.CreateError(nameof(FirstName), "First name is required"));
}
if (string.IsNullOrWhitespace(LastName))
{
validationResults.Add(FieldValidationResult.CreateError(nameof(LastName), "Last name is required"));
}
}
}
View models
This is a view model with:
- Automatic injection of the DataContext
- Automatic mapping of properties & validation from model => view model
public class PersonViewModel : ViewModelBase
{
public PersonViewModel(Person person)
{
Argument.IsNotNull(() => person);
Person = person;
}
[Model]
private Person Person { get; set; }
[ViewModelToModel]
public string FirstName { get; set; }
[ViewModelToModel]
public string LastName { get; set; }
}
Continue reading
- Introduction
- FAQ
- Setup, deployment & projects
- Getting started
- Examples
- Catel.Core
- Catel.MVVM
- Catel.Fody
- Catel.ReSharper
- Tips & tricks
- API reference
- Caveats in WPF
- Creating the WPF project
- Creating the Xamarin.Forms project
- Customizing the serialization engines
- Different interpretations of MVVM
- General
- MessageBase
- ObservableObject
- ServiceLocator
- Using attributes
- Using the code snippets
- Validation via validate methods
- WPF implementation for exception handling
- AbsoluteExpirationPolicy
- AccelerometerSensorListener
- AccelerometerService
- AccelerometerValue
- AccelerometerValueChangedEventArgs
- ActionTask
- Activity
- ActivityEventArgs
- ActivityLifecycleCallbacksListener
- AdvancedPropertyChangedEventArgs
- ApiCop
- ApiCopListenerBase
- ApiCopListenerGrouping
- ApiCopManager
- ApiCopResult
- ApiCopRule
- ApiCopRuleLevel
- AppDomainExtensions
- Application
- ApplicationClosingEventArgs
- ApplicationDataTarget
- ApplicationExtensions
- AreEqualMultiValueConverter
- Argument
- ArrayShim
- AssemblyExtensions
- AssemblyHelper
- AssemblyLoadedEventArgs
- AsyncEventHandler
- AsyncEventHandlerExtensions
- AsyncLock
- AsyncWaitQueueExtensions
- AttributeValidatorProvider
- AuditingHelper
- AuditingManager
- AuditorBase
- Authentication
- AuthenticationAction
- AutoCompletion
- AutoCompletionService
- AutoScroll
- AwaitableDisposable
- BatchLogListenerBase
- BeginEditEventArgs
- BehaviorBase
- BehaviorEventArgs
- BinarySerializationContextInfo
- BinarySerializationContextInfoFactory
- BinarySerializer
- Binding
- BindingBase
- BindingContext
- BindingContextExtensions
- BindingExtensions
- BindingFlags
- BindingFlagsHelper
- BindingHelper
- BindingMode
- BindingParty
- BindingPartyExtensions
- BindingWithValidation
- BooleanToCollapsingVisibilityConverter
- BooleanToGrayscaleConverter
- BooleanToHidingVisibilityConverter
- BooleanToOppositeBooleanConverter
- BooleanToTextConverter
- BoxingCache
- Buffer4096Poolable
- BufferPolicy
- BufferPoolableBase
- BufferedEventArgs
- BusinessRuleValidationResult
- ByteArrayExtensions
- CacheInvalidatedEventArgs
- CacheStorage
- CachedPropertyInfo
- CameraOperationCompletedEventArgs
- CameraService
- CameraServiceBase
- CameraType
- CancelEditCompletedEventArgs
- CancelEditEventArgs
- CancelingEventArgs
- CancellableEventArgs
- CannotGetPropertyValueException
- CannotSetPropertyValueException
- CatelDependencyResolver
- CatelEnvironment
- CatelJsonContractResolver
- CatelJsonConverter
- CatelTypeInfo
- Caveats in UWP
- ChangeNotificationWrapper
- ChildAwareModelBase
- CircularDependencyException
- CollapsingVisibilityConverterBase
- CollectionExtensions
- CollectionHelper
- CollectionToCollapsingVisibilityConverter
- CollectionToCountConverter
- CollectionToHidingVisibilityConverter
- ColorToBrushConverter
- CombinedMessage
- Command
- CommandBase
- CommandBehaviorBase
- CommandBinding
- CommandCanceledEventArgs
- CommandContainerBase
- CommandCreatedEventArgs
- CommandEventArgs
- CommandEventTriggerBase
- CommandExecutedEventArgs
- CommandHelper
- CommandManager
- CommandManagerBinding
- CommandManagerWrapper
- CommandProgressChangedEventArgs
- CommandTriggerActionBase
- CommandTriggerBase
- ComparableModelBase
- CompositeCommand
- CompositeExpirationPolicy
- CompositeFilter
- CompositePredicate
- CompositeValidator
- CompositeValidatorProvider
- ConfigurationChangedEventArgs
- ConfigurationContainer
- ConfigurationExtensions
- ConfigurationService
- ConsoleApiCopListener
- ConsoleLogListener
- ContainsItemsConverter
- ContentReadyEventArgs
- ContextHelper
- ConverterHelper
- Cops
- CoreModule
- Creating the models
- CustomExpirationPolicy
- Customizing the serialization for specific models
- DataContextChangedEventArgs
- DataContextChangedHelper
- DataContextSubscriptionMode
- DataContextSubscriptionService
- DataContractSerializerFactory
- DataWindow
- DataWindowButton
- DataWindowDefaultButton
- DataWindowMode
- DebugConverter
- DebugLogListener
- DefaultAsyncWaitQueue
- DefaultViewModelToModelMappingConverter
- DelayBindingUpdate
- DelegateExtensions
- DelegateHelper
- DependencyObjectExtensions
- DependencyPropertyChangedHelper
- DependencyPropertyHelper
- DependencyPropertyInfo
- DependencyPropertyValueChangedEventArgs
- DependencyResolverExtensions
- DependencyResolverManager
- DesignTimeCodeAttribute
- DesignTimeHelper
- DesignTimeInitializer
- DetermineViewModelInstanceEventArgs
- DetermineViewModelTypeEventArgs
- DictionaryExtensions
- DispatcherExtensions
- DispatcherHelper
- DispatcherObservableObject
- DispatcherObservableObject
- DispatcherService
- DisplayNameAttribute
- Disposable
- DisposableToken
- DoubleClickToCommand
- DragDrop
- DurationExpirationPolicy
- DynamicConfiguration
- DynamicConfigurationExtensions
- DynamicConfigurationSerializerModifier
- EditEventArgs
- EditableObjectHelper
- EmptyStringToCollapsingVisibilityConverter
- EmptyStringToHidingVisibilityConverter
- EndEditEventArgs
- Enum
- EnumToCollapsingVisibilityConverter
- EnumToHidingVisibilityConverter
- EnumerableExtensions
- EnvironmentHelper
- EtwLogListener
- EventChangeType
- EventHandlerExtensions
- EventLogListener
- EventToCommand
- EventTriggerBase
- ExceptionExtensions
- ExceptionFactory
- ExceptionHandler
- ExceptionHandlerExtensions
- ExceptionPredicate
- ExceptionService
- ExceptionServiceExtensions
- ExceptionTester
- ExcludeFromSerializationAttribute
- ExcludeFromValidationAttribute
- ExpirationPolicy
- ExpiredEventArgs
- ExpiringEventArgs
- ExportMode
- ExpressionHelper
- ExtendedSuspensionContext
- ExternalContainerNotSupportedException
- FastBindingList
- FastDateTime
- FastObservableCollection
- FastViewPropertySelector
- FieldValidationResult
- FileLogListener
- FileServiceBase
- FirstInterfaceRegistrationConvention
- FlashMode
- Focus
- FocusBehaviorBase
- FocusFirstControl
- FocusMoment
- FocusOnKeyPress
- FormattingConverter
- Fragment
- FrameworkElementExtensions
- GetFirstValidationErrorConverter
- GuidObjectIdGenerator
- HashHelper
- HideUntilViewModelLoaded
- HidingVisibilityConverterBase
- IAccelerometerService
- IAccelerometerValue
- IAdvancedEditableObject
- IAdvancedNotifyPropertyChanged
- IApiCop
- IApiCopListener
- IApiCopResult
- IApiCopRule
- IAsyncWaitQueue
- IAuditor
- IAuthenticationProvider
- IAutoCompletionService
- IBatchLogListener
- IBatchLogListenerExtensions
- IBehavior
- IBinarySerializer
- IBindableEnum
- IBufferPolicy
- IBusinessRuleValidationResult
- ICacheStorage
- ICameraService
- ICatelCommand
- ICatelTaskCommand
- ICommandManager
- ICommandManagerExtensions
- ICompositeCommand
- ICompositeFilter
- IConfigurationService
- IConfigurationServiceExtensions
- ICustomJsonSerializable
- ICustomXmlSerializable
- IDataContextSubscriptionService
- IDataContractSerializerFactory
- IDataErrorInfo
- IDataWarningInfo
- IDataWindow
- IDependencyResolver
- IDependencyResolverManager
- IDispatcherService
- IDispatcherServiceExtensions
- IDisposableToken
- IEntryAssemblyResolver
- IExceptionHandler
- IExceptionService
- IExecute
- IExecuteWithObject
- IFieldSerializable
- IFieldValidationResult
- IFileSupport
- IFluent
- IJsonLogFormatter
- IJsonSerializer
- ILanguageService
- ILanguageSource
- ILocation
- ILocationService
- ILocator
- ILog
- ILogListener
- IMessageMediator
- IMessageService
- IModel
- IModelEditor
- IModelEqualityComparer
- IModelExtensions
- IModelSerialization
- INavigationRootService
- INavigationService
- INavigationView
- INeedCustomInitialization
- INotifyDataWarningInfo
- INotifyPropertyChangedExtensions
- IObjectAdapter
- IObjectConverterService
- IObjectConverterServiceExtensions
- IObjectIdGenerator
- IOpenFileService
- IPage
- IPleaseWaitService
- IPleaseWaitServiceExtensions
- IPolicy
- IPoolManager
- IPoolable
- IProcessService
- IProgressNotifyableViewModel
- IPropertySerializable
- IRegistrationConvention
- IRegistrationConventionHandler
- IRelationalViewModel
- IRetryPolicy
- IRollingInMemoryLogService
- ISavableModel
- ISavableModelExtensions
- ISaveFileService
- ISchedulerService
- ISelectDirectoryService
- ISensorService
- ISerializable
- ISerializationConfiguration
- ISerializationContext
- ISerializationContextExtensions
- ISerializationContextInfo
- ISerializationContextInfoFactory
- ISerializationManager
- ISerializationManagerExtensions
- ISerializer
- ISerializerExtensions
- ISerializerModifier
- IService
- IServiceLocator
- IServiceLocatorInitializer
- IStartUpInfoProvider
- IStartUpInfoProviderExtensions
- IState
- IStateService
- IStateServiceExtensions
- ISuspendChangeNotificationsCollection
- ITask
- ITaskProgressReport
- ITaskProgressTracker
- ITrigger
- ITypeFactory
- ITypeRequestPath
- IUIVisualizerService
- IUIVisualizerServiceExtensions
- IUniqueIdentifyable
- IUrlLocator
- IUserControl
- IValidatable
- IValidatableExtensions
- IValidatableModel
- IValidatableModelExtensions
- IValidationContext
- IValidationContextExtensions
- IValidationResult
- IValidationSummary
- IValidator
- IValidatorProvider
- IValueConverter
- IValueValidator
- IVibrateService
- IView
- IViewExportService
- IViewLoadManager
- IViewLoadState
- IViewLocator
- IViewManager
- IViewManagerExtensions
- IViewModel
- IViewModelCommandManager
- IViewModelContainer
- IViewModelExtensions
- IViewModelFactory
- IViewModelFactoryExtensions
- IViewModelLocator
- IViewModelLocatorExtensions
- IViewModelManager
- IViewModelService
- IViewModelToModelConverter
- IViewModelWrapper
- IViewModelWrapperService
- IViewPropertySelector
- IWeakAction
- IWeakEventListener
- IWeakFunc
- IWeakReference
- IWrapControlService
- IXmlNamespaceManager
- IXmlSerializer
- IncludeInSerializationAttribute
- InfoBarMessageControl
- InfoBarMessageControlGenerationMode
- InfoBarMessageControlMode
- InfoBarMessageControlVisibilityConverter
- InitializationApiCopRule
- InitializationMode
- InjectAttribute
- InjectionConstructorAttribute
- InputGesture
- InputGestureExtensions
- IntToStringConverter
- IntegerObjectIdGenerator
- InvalidPropertyException
- InvalidPropertyValueException
- InvalidViewModelException
- IoCConfiguration
- IoCConfigurationSection
- IoCFactory
- IsSelectedConverter
- IsSelectedValueConverter
- JsonExtensions
- JsonLogFormatter
- JsonSerializationConfiguration
- JsonSerializationContextInfo
- JsonSerializationContextInfoFactory
- JsonSerializer
- KeyPressToCommand
- KeyValuePairSerializerModifier
- KeyboardHelper
- KnownPlatforms
- LanguageBinding
- LanguageConverter
- LanguageHelper
- LanguageResourceKey
- LanguageResourceSource
- LanguageService
- LanguageServiceBase
- LateBoundImplementation
- ListDictionary
- Location
- LocationChangedEventArgs
- LocationListener
- LocationService
- LocationServiceBase
- LocatorBase
- Log
- LogBatchEntry
- LogData
- LogEntry
- LogEvent
- LogExtensions
- LogListenerBase
- LogListenerConfiguration
- LogListenerConfigurationCollection
- LogManager
- LogMessageEventArgs
- LoggingConfigurationSection
- LogicBase
- LogicExtensions
- LogicViewModelBehavior
- LongObjectIdGenerator
- MVVM
- MVVMModule
- MemberInfoExtensions
- MemberMetadata
- MemberSerializationEventArgs
- MemberValue
- Message mediator
- MessageBase
- MessageButton
- MessageImage
- MessageMediator
- MessageMediatorHelper
- MessageRecipientAttribute
- MessageResult
- MessageService
- MethodToValueConverter
- MissingTypeEventArgs
- ModelAttribute
- ModelBase
- ModelBaseExtensions
- ModelCleanUpMode
- ModelEqualityComparer
- ModelNotRegisteredException
- ModuleInitializer
- ModuleInitializer
- MouseInfo
- MultiplyConverter
- MustBeImplementedException
- NamingConvention
- NamingRegistrationConvention
- Navigate
- NavigatedEventArgs
- NavigatingEventArgs
- NavigationAdapter
- NavigationAdapterBase
- NavigationContext
- NavigationEventArgsBase
- NavigationEventArgsExtensions
- NavigationLogicBase
- NavigationMode
- NavigationModeExtensions
- NavigationRootService
- NavigationService
- NavigationServiceBase
- NavigationViewModelBase
- NotSupportedInPlatformException
- NotifyListChangedEventArgs
- NotifyRangedCollectionChangedEventArgs
- NotifyRangedListChangedAction
- NotifyRangedListChangedEventArgs
- NullableValueConverter
- NumericBasedObjectIdGenerator
- NumericTextBox
- ObjectAdapter
- ObjectConverterService
- ObjectExtensions
- ObjectExtensions
- ObjectExtensions
- ObjectHelper
- ObjectIdGenerator
- ObjectToDisplayNameConverter
- ObjectToStringHelper
- ObservableObject
- ObservableObjectExtensions
- OpenFileService
- OpenInstanceActionHandler
- OpenInstanceEventHandler
- Page
- PageLogic
- PageNotRegisteredException
- ParallelHelper
- Path
- PlatformToBooleanConverter
- Platforms
- PleaseWaitService
- PleaseWaitWorkDelegate
- PolicyBase
- PoolManager
- PoolableBase
- PopupHelper
- ProcessCompletedDelegate
- ProcessExtensions
- ProcessService
- ProgressContext
- ProgressNotifyableViewModel
- ProgressiveTaskCommand
- PropertyAlreadyRegisteredException
- PropertyBag
- PropertyChangedEventArgsExtensions
- PropertyData
- PropertyDataManager
- PropertyHelper
- PropertyNotFoundException
- PropertyNotFoundInModelException
- PropertyNotNullableException
- PropertyNotRegisteredException
- PropertyValue
- ReaderWriterLockSlimExtensions
- RedirectDeserializationBinder
- RedirectTypeAttribute
- ReferenceEqualityComparer
- ReferenceInfo
- ReferenceManager
- ReferenceToBooleanConverter
- ReferenceToCollapsingVisibilityConverter
- ReferenceToHidingVisibilityConverter
- ReflectionExtensions
- Registration
- RegistrationConventionBase
- RegistrationConventionHandler
- RegistrationConventionHandlerExtensions
- RegistrationInfo
- RegistrationType
- ResourceHelper
- ResourceHelper
- RetryPolicy
- RetryingEventArgs
- RollingInMemoryLogListener
- RollingInMemoryLogService
- RoutedEventTrigger
- Rules
- RuntimeBindingRedirect
- SavableModelBase
- SaveFileService
- SavingEventArgs
- SchedulerService
- ScopeClosedEventArgs
- ScopeManager
- ScrollDirection
- SelectDirectoryService
- SelectTextOnFocus
- SensorServiceBase
- SeqLogListener
- SerializableKeyValuePair
- SerializationConfiguration
- SerializationContext
- SerializationContextHelper
- SerializationContextMode
- SerializationEventArgs
- SerializationFactory
- SerializationInfoSerializationContextInfo
- SerializationJsonModule
- SerializationManager
- SerializationMemberGroup
- SerializationModelInfo
- SerializationObject
- SerializationScope
- SerializeAsCollectionAttribute
- SerializeEnumAsStringAttribute
- SerializeUsingParseAndToStringAttribute
- SerializerBase
- SerializerModifierAttribute
- SerializerModifierBase
- ServiceBase
- ServiceDependencyExtension
- ServiceLocator
- ServiceLocatorAutoRegistrationManager
- ServiceLocatorConfiguration
- ServiceLocatorConfigurationCollection
- ServiceLocatorExtensions
- ServiceLocatorRegistration
- ServiceLocatorRegistrationAttribute
- ServiceLocatorRegistrationGroup
- ServiceLocatorRegistrationMode
- ShortDateFormattingConverter
- SimpleMessage
- Size
- SlidingExpirationPolicy
- StartUpInfoProvider
- StateService
- StaticHelper
- StatusLogListener
- StreamExtensions
- StringBuilderExtensions
- StringExtensions
- StringToIntConverter
- StringToObjectHelper
- StringToTypeConverter
- SupportedPlatforms
- SuspensionContext
- SuspensionMode
- SynchronizationContext
- SynchronizationContextExtensions
- TagHelper
- TaskBase
- TaskCommand
- TaskExtensions
- TaskHelper
- TaskShim
- TextApiCopListenerBase
- TextFileApiCopListener
- TextToLowerCaseConverter
- TextToUpperCaseConverter
- ThemeHelper
- ThreadHelper
- TimeDisplay
- Timeout
- Timer
- TimerCallback
- TooManyDependenciesApiCopRule
- TriggerActionBase
- TriggerBase
- TriggerEventArgs
- TypeArray
- TypeCache
- TypeExtensions
- TypeFactory
- TypeFactory
- TypeFactoryExtensions
- TypeHelper
- TypeInfo
- TypeInfoExtensions
- TypeInstantiatedEventArgs
- TypeNotRegisteredException
- TypeRegisteredEventArgs
- TypeRequestInfo
- TypeRequestPath
- UICompletedEventArgs
- UIElementExtensions
- UIVisualizerService
- ULongObjectIdGenerator
- UniqueIdentifierHelper
- UnloadBehavior
- UnsetBindingValue
- UnusedFeatureApiCopRule
- UpdatableMarkupExtension
- UpdateBindingBehaviorBase
- UpdateBindingOnPasswordChanged
- UpdateBindingOnTextChanged
- UriExtensions
- UrlLocator
- UserControl
- UserControlLogic
- Using conventions
- Using the item templates
- ValidatableModelBase
- ValidateModelAttribute
- Validation in model or view model?
- Validation via data annotations
- ValidationContext
- ValidationContextChange
- ValidationContextChangeType
- ValidationContextHelper
- ValidationEventAction
- ValidationEventArgs
- ValidationEventArgs
- ValidationExtensions
- ValidationResult
- ValidationResultType
- ValidationSummary
- ValidationType
- ValidatorBase
- ValidatorProviderBase
- ValueConverterBase
- ValueConverterGroup
- VibrateService
- ViewExportService
- ViewExtensions
- ViewHelper
- ViewLoadEventArgs
- ViewLoadManager
- ViewLoadStateEvent
- ViewLocator
- ViewManager
- ViewModelBase
- ViewModelClosedEventArgs
- ViewModelCommandManager
- ViewModelExtensions
- ViewModelFactory
- ViewModelLocator
- ViewModelManager
- ViewModelManagerExtensions
- ViewModelNotRegisteredException
- ViewModelServiceBase
- ViewModelServiceHelper
- ViewModelToModelAttribute
- ViewModelToModelConverterBase
- ViewModelToModelMapping
- ViewModelToModelMode
- ViewModelToViewConverter
- ViewModelWrapper
- ViewModelWrapperService
- ViewModelWrapperServiceBase
- ViewPropertySelector
- ViewStack
- ViewStackPartEventArgs
- ViewToViewModelAttribute
- ViewToViewModelMappingType
- Visibility
- VisibilityConverterBase
- WarningAndErrorValidator
- WeakAction
- WeakActionBase
- WeakEventListener
- WeakFunc
- WeakViewInfo
- Window
- WindowEventToCommand
- WindowExtensions
- WindowLogic
- WindowNotRegisteredException
- WrapControlHelper
- WrapControlService
- WrapControlServiceControlNames
- WrapControlServiceWrapOptions
- WrapOptions
- WrapOptions
- WrongViewModelTypeException
- XmlHelper
- XmlNameMapper
- XmlNamespace
- XmlNamespaceManager
- XmlSchemaHelper
- XmlSchemaManager
- XmlSerializationConfiguration
- XmlSerializationContextInfo
- XmlSerializationContextInfoFactory
- XmlSerializer
- XmlSerializerOptimalizationMode
- Caveats in Android
- DependencyResolver and DependencyResolverManager
- Introduction to MVVM and models
- Listeners
- Messaging via attributes
- ModelBase
- Problem solving
- Serializing data from/to disk
- Serializing members using ToString / Parse
- Using the project templates
- Validation via special model validators
- Caveats in iOS
- Creating the view models
- Creating view models with Catel
- Ensuring integrity of the ServiceLocator
- Performance considerations
- Taking full control of serialization
- ValidatableModelBase
- Validation via IValidator
- ComparableModelBase
- Creating the views (user controls)
- Introduction to services
- Using the validation context
- Creating the views (windows)
- Getting a summary of validation results
- Introduction to the nested user controls problem
- SavableModelBase
- ChildAwareModelBase
- Deferring validation
- Hooking up everything together
- Finalizing the application
- Using ModelBase as base for entities
- Advanced property change notifications
- Catel 4.0
- Catel 4.1
- Catel 5.0
- Catel 5.4
- Activities (pages)
- Authentication
- AutoCompletionBehavior
- AutoScroll
- Batch log listeners
- Binary
- Change notification wrapper
- Command bindings
- CommandManager and command containers (Application-wide commands)
- Commands
- Commands authentication
- ConsoleLogListener
- Controlling the instantiation of view models
- Creating a basic view model
- Creating a view model with a model
- Creating a view model with a model and mappings
- Customizing DataContext subscription behavior
- DataWindow - under the hood
- DebugLogListener
- DelayBindingUpdate
- Design-time view models
- DisplayAttribute
- DisplayNameAttribute
- DoubleClickToCommand
- Event Tracing for Windows (ETW)
- EventLogListener
- EventToCommand
- Exposing properties of a model automatically
- FileLogListener
- Finding the view of a view model
- Focus
- Fragments (user controls)
- HideUntilViewModelLoaded
- Hooking a command to validation automatically
- Improving performance by defining the view model grid manually
- Json
- Keeping view models alive
- KeyPressToCommand
- LocationService
- Log4net
- Mapping properties from view to view model
- MessageService
- MouseInfo
- NLog
- Naming conventions
- Navigate
- NavigationService
- Nested view models
- NumericTextBox
- OpenFileService
- PleaseWaitService
- ProcessService
- Property bindings
- Requery commands automatically using CommandManager
- RollingInMemoryLogListener
- Running code at design-time
- SaveFileService
- SchedulerService
- SelectDirectoryService
- SelectTextOnFocus
- SeqLogListener
- Thread safe code
- UIVisualizerService
- UpdateBindingOnPasswordChanged
- UpdateBindingOnTextChanged
- UrlLocator
- UserControl
- UserControl - under the hood
- UserControl Resources
- Using a custom control
- Using a custom window
- Using a tabbed interface with MVVM
- Validation controls
- Validation in view models
- VibrateService
- ViewExportService
- ViewLocator
- ViewModelLocator
- Weak events
- Window and DataWindow
- Xml
- footer
- header