A WPF desktop application demonstrating the IDEA StatiCa Connection API. It provides a graphical interface for opening connection projects, running structural analyses, exporting results, managing templates, and visualizing connections in 3D.
Architecture
The application follows the MVVM (Model-View-ViewModel) pattern with dependency injection via Microsoft.Extensions.DependencyInjection.
ConApiWpfClientApp/
├── App.xaml(.cs) # Entry point, DI container configuration
├── MainWindow.xaml(.cs) # Main application window
├── appsettings.json # Configuration (API endpoint, setup path)
├── Models/
│ ├── ProjectModel.cs # Currently open project state
│ ├── ConnectionLibraryModel.cs # Connection library search state
│ └── ExpressionModel.cs # Expression evaluation input
├── Services/
│ ├── IConnectionApiService.cs # Main API abstraction (interface)
│ ├── ConnectionApiService.cs # API implementation wrapping IConnectionApiClient
│ ├── IExpressionProvider.cs # Expression input provider (interface)
│ ├── ExpressionProvider.cs # Builds default expressions from member data
│ ├── ITemplateProvider.cs # Template loading abstraction (interface)
│ ├── TemplateProviderFile.cs # Loads templates from .contemp files
│ ├── ConnectionLibraryProposer.cs # Browses connection library for templates
│ ├── JsonEditorService.cs # Generic JSON object editor
│ ├── TextEditorService.cs # Plain text editor
│ └── TemplateMappingSetter.cs # Template member/cross-section mapping editor
├── ViewModels/
│ ├── ViewModelBase.cs # Base class (ObservableObject)
│ ├── MainWindowViewModel.cs # Main VM with all commands
│ ├── ConnectionViewModel.cs # Wraps ConConnection for data binding
│ ├── JsonEditorViewModel.cs # JSON editor dialog VM
│ ├── ConnectionLibraryViewModel.cs # Connection library browser VM
│ └── ProposedCdiViewModel.cs # Connection design item with lazy-loaded details
├── Views/
│ ├── JsonEditorWindow.xaml(.cs) # JSON/text editor dialog
│ ├── ConnectionLibraryWindow.xaml(.cs) # Connection library browser dialog
│ ├── DesignItemsView.xaml(.cs) # Design item list control
│ └── DesignItemDetailView.xaml(.cs) # Design item detail control
└── Tools/
└── JsonTools.cs # JSON formatting utilities
Layer responsibilities
Layer
Responsibility
Model
Domain data (ProjectModel holds the ConProject returned by the API). No UI logic.
ViewModel
UI state (IsBusy, Connections, SelectedConnection, OutputText), relay commands, and orchestration of service calls. Uses CommunityToolkit.Mvvm source generators ([ObservableProperty], [RelayCommand]).
View
XAML only. Data-binds to ViewModel properties and commands. No code-behind logic beyond InitializeComponent.
Services
All business logic and API communication. IConnectionApiService is the main abstraction; other services handle templates, expressions, JSON editing, and file dialogs.
Dependency injection
All services, models, and view models are registered in App.xaml.cs:
Registration
Lifetime
Purpose
IConfiguration
Singleton
appsettings.json + environment variables
IPluginLogger
Singleton
Serilog-based diagnostic logging
IConnectionApiService / ConnectionApiService
Singleton
Connection API wrapper
ProjectModel
Singleton
Current project state
MainWindowViewModel
Singleton
Main view model
ISceneController / SceneController
Singleton
3D scene rendering
IFileDialogService / FileDialogService
Transient
Open/save file dialogs
JsonEditorViewModel
Transient
JSON editor instances
IomEditorWindowViewModel
Singleton
IOM generator dialog
The ViewModel never instantiates services or dialogs directly -- everything is injected through the constructor.