{"id":40530,"date":"2026-06-14T17:00:21","date_gmt":"2026-06-14T14:00:21","guid":{"rendered":"https:\/\/www.fl.ru\/projects\/5509473\/-c---net-8--wpf-mvvm-ili-winui-3--sqlite--webview2.html"},"modified":"2026-06-14T17:00:21","modified_gmt":"2026-06-14T14:00:21","slug":"c-net-8-wpf-mvvm-%d0%b8%d0%bb%d0%b8-winui-3-sqlite-webview2-%d0%b4%d0%bb%d1%8f-%d0%b2%d1%81%d0%b5%d1%85","status":"publish","type":"post","link":"https:\/\/texnolenta.ru\/job\/2026\/06\/14\/c-net-8-wpf-mvvm-%d0%b8%d0%bb%d0%b8-winui-3-sqlite-webview2-%d0%b4%d0%bb%d1%8f-%d0%b2%d1%81%d0%b5%d1%85\/","title":{"rendered":"C# \/ .NET 8 \u2022 WPF (MVVM) \u0438\u043b\u0438 WinUI 3 \u2022 SQLite \u2022 WebView2 (\u0434\u043b\u044f \u0432\u0441\u0435\u0445)"},"content":{"rendered":"<p> \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e desktop-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C#\/.NET 8 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0440\u044b\u043d\u043e\u0447\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. SKS \u042d\u0442\u043e \u043d\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0438 \u043d\u0435 \u0444\u043e\u0440\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 Excel. \u041d\u0443\u0436\u043d\u0430 desktop-\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u0422\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u0442\u0435\u043a:<br \/>\n\u2022 C# \/ .NET 8<br \/>\n\u2022 WPF (MVVM) \u0438\u043b\u0438 WinUI 3<br \/>\n\u2022 SQLite<br \/>\n\u2022 WebView2 \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430:<br \/>\n\u2022 Core<br \/>\n\u2022 Application<br \/>\n\u2022 Infrastructure<br \/>\n\u2022 UI<br \/>\n\u2022 Tests \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 pipeline: Excel \u2192 Import Validation \u2192 Normalization \u2192 Must-Match \u2192 Similarity \u2192 Classification \u2192 Deduplication \u2192 Aggregation \u2192 Snapshot \u2192 Report \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<br \/>\n\u2022 \u0441\u0442\u0440\u043e\u0433\u0430\u044f \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430;<br \/>\n\u2022 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438 \u0432 UI;<br \/>\n\u2022 adapter-based source architecture;<br \/>\n\u2022 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 DTO\/\u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u043e\u044f\u043c\u0438;<br \/>\n\u2022 deterministic rule-based processing;<br \/>\n\u2022 explainable decision logic \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438;<br \/>\n\u2022 trace \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438: \u044d\u0442\u0430\u043f, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f;<br \/>\n\u2022 immutable \/ append-only snapshots;<br \/>\n\u2022 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043f\u0440\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445;<br \/>\n\u2022 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0434\u043e 10 000+ \u043d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440 \u0437\u0430 \u0437\u0430\u043f\u0443\u0441\u043a;<br \/>\n\u2022 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438;<br \/>\n\u2022 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044f\u0434\u0440\u0430;<br \/>\n\u2022 \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u0438 \u043f\u0440\u0438\u0451\u043c\u043e\u0447\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c:<br \/>\n\u2022 \u0438\u043c\u043f\u043e\u0440\u0442 \u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u044e Excel-\u043d\u043e\u043c\u0435\u043d\u043a\u043b\u0430\u0442\u0443\u0440\u044b;<br \/>\n\u2022 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445;<br \/>\n\u2022 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432;<br \/>\n\u2022 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e rule-based \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443;<br \/>\n\u2022 \u0436\u0451\u0441\u0442\u043a\u0438\u0439 Must-Match;<br \/>\n\u2022 Similarity \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043f\u043e\u043b\u044f\u043c \u0438 \u0432\u0435\u0441\u0430\u043c;<br \/>\n\u2022 \u043a\u043b\u0430\u0441\u0441\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445;<br \/>\n\u2022 \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e;<br \/>\n\u2022 \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0443;<br \/>\n\u2022 RawSnapshot \/ ResultSnapshot;<br \/>\n\u2022 \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438;<br \/>\n\u2022 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u043a\u0443;<br \/>\n\u2022 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0435 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438. \u041a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f:<br \/>\n\u2022 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 fuzzy matching \u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f;<br \/>\n\u2022 \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u0432 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u0434\u043d\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c;<br \/>\n\u2022 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438;<br \/>\n\u2022 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0439;<br \/>\n\u2022 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f UI \u043a \u0411\u0414 \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d;<br \/>\n\u2022 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0435 Windows-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 Visual Studio. \u0420\u0430\u0431\u043e\u0442\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u043c\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u043c\u0443 \u0422\u0417 \u0441 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439, \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u043f\u0440\u0438\u0451\u043c\u043a\u0438, \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u043a \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c\u0438 \u0441\u0434\u0430\u0447\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430. \u041f\u043e\u0441\u043b\u0435 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u0422\u0417 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c:<br \/>\n\u2022 \u043e\u0446\u0435\u043d\u043a\u0443 \u0441\u0440\u043e\u043a\u043e\u0432;<br \/>\n\u2022 \u043e\u0446\u0435\u043d\u043a\u0443 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438;<br \/>\n\u2022 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f;<br \/>\n\u2022 \u0440\u0438\u0441\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c;<br \/>\n\u2022 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0422\u0417. \u0420\u0430\u0431\u043e\u0442\u0430 \u043f\u043e \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0443 \u0447\u0435\u0440\u0435\u0437 \u042e\u0440. \u043b\u0438\u0446\u043e  <\/p>\n","protected":false},"excerpt":{"rendered":"<p> \u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e desktop-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 C#\/.NET 8 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0440\u044b\u043d\u043e\u0447\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. SKS \u042d\u0442\u043e \u043d\u0435 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0430\u0440\u0441\u0435\u0440 \u0438 \u043d\u0435 \u0444\u043e\u0440\u043c\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 Excel. \u041d\u0443\u0436\u043d\u0430 desktop-\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441 \u0444\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[615],"class_list":["post-40530","post","type-post","status-publish","format-standard","hentry","category-flrusoft","tag--c"],"_links":{"self":[{"href":"https:\/\/texnolenta.ru\/job\/wp-json\/wp\/v2\/posts\/40530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/texnolenta.ru\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/texnolenta.ru\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/texnolenta.ru\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/texnolenta.ru\/job\/wp-json\/wp\/v2\/comments?post=40530"}],"version-history":[{"count":0,"href":"https:\/\/texnolenta.ru\/job\/wp-json\/wp\/v2\/posts\/40530\/revisions"}],"wp:attachment":[{"href":"https:\/\/texnolenta.ru\/job\/wp-json\/wp\/v2\/media?parent=40530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/texnolenta.ru\/job\/wp-json\/wp\/v2\/categories?post=40530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/texnolenta.ru\/job\/wp-json\/wp\/v2\/tags?post=40530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}