ebakhtin 6 bulan lalu
melakukan
a8d4c159c7
100 mengubah file dengan 2290 tambahan dan 0 penghapusan
  1. TEMPAT SAMPAH
      .vs/333/FileContentIndex/3dedf0f2-885c-48f5-b8fa-316d51467a25.vsidx
  2. TEMPAT SAMPAH
      .vs/333/v17/.wsuo
  3. 23 0
      .vs/333/v17/DocumentLayout.json
  4. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_app.metadata.v7.bin
  5. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_app.projects.v7.bin
  6. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_data_csv.metadata.v7.bin
  7. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_data_csv.projects.v7.bin
  8. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_filtering.metadata.v7.bin
  9. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_filtering.projects.v7.bin
  10. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_search_sort.metadata.v7.bin
  11. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_search_sort.projects.v7.bin
  12. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_template.metadata.v7.bin
  13. TEMPAT SAMPAH
      .vs/ProjectEvaluation/wpf_template.projects.v7.bin
  14. 3 0
      .vs/ProjectSettings.json
  15. 7 0
      .vs/VSWorkspaceState.json
  16. TEMPAT SAMPAH
      .vs/slnx.sqlite
  17. TEMPAT SAMPAH
      .vs/wpf_app/DesignTimeBuild/.dtbcache.v2
  18. TEMPAT SAMPAH
      .vs/wpf_app/FileContentIndex/081e9c10-f179-41da-9690-e56a461bacd0.vsidx
  19. TEMPAT SAMPAH
      .vs/wpf_app/FileContentIndex/49b25c40-b024-48d0-9940-05702e2be3fd.vsidx
  20. TEMPAT SAMPAH
      .vs/wpf_app/FileContentIndex/630976dd-a223-403d-88b3-964eab683814.vsidx
  21. TEMPAT SAMPAH
      .vs/wpf_app/FileContentIndex/671fd6fa-1e9f-4542-9bd1-53686075ebb8.vsidx
  22. TEMPAT SAMPAH
      .vs/wpf_app/FileContentIndex/8d1094f4-19ca-4f5b-a1e5-3f9b5bb64bfb.vsidx
  23. TEMPAT SAMPAH
      .vs/wpf_app/v17/.futdcache.v2
  24. TEMPAT SAMPAH
      .vs/wpf_app/v17/.suo
  25. 186 0
      .vs/wpf_app/v17/DocumentLayout.json
  26. TEMPAT SAMPAH
      .vs/wpf_data_csv/FileContentIndex/4bd0ad83-385e-457f-b031-e945216ef341.vsidx
  27. TEMPAT SAMPAH
      .vs/wpf_data_csv/FileContentIndex/627afe6b-0a6c-4df6-a40e-64241d4425d0.vsidx
  28. TEMPAT SAMPAH
      .vs/wpf_data_csv/FileContentIndex/bed431ba-6255-4633-9c59-4193b8319f33.vsidx
  29. TEMPAT SAMPAH
      .vs/wpf_data_csv/FileContentIndex/cba83413-0261-4743-bb10-4e3c148b36e1.vsidx
  30. TEMPAT SAMPAH
      .vs/wpf_data_csv/FileContentIndex/f29c5c1e-274b-420f-9c5c-6534b2d9813d.vsidx
  31. TEMPAT SAMPAH
      .vs/wpf_filtering/DesignTimeBuild/.dtbcache.v2
  32. TEMPAT SAMPAH
      .vs/wpf_filtering/FileContentIndex/113a89ff-a931-4e8d-862a-01f3c86a443e.vsidx
  33. TEMPAT SAMPAH
      .vs/wpf_filtering/FileContentIndex/1e28b45a-6157-45cd-b72a-ab2c1210d6de.vsidx
  34. TEMPAT SAMPAH
      .vs/wpf_filtering/FileContentIndex/55b5e32a-b0cc-42fd-bb18-c0fcf1e53857.vsidx
  35. TEMPAT SAMPAH
      .vs/wpf_filtering/FileContentIndex/775bafd6-96fc-4bc6-8617-fd9c392a1fae.vsidx
  36. TEMPAT SAMPAH
      .vs/wpf_filtering/FileContentIndex/906c827d-01d6-4857-9ef5-875cc3e54e2c.vsidx
  37. TEMPAT SAMPAH
      .vs/wpf_filtering/v17/.futdcache.v2
  38. TEMPAT SAMPAH
      .vs/wpf_filtering/v17/.suo
  39. 91 0
      .vs/wpf_filtering/v17/DocumentLayout.json
  40. TEMPAT SAMPAH
      .vs/wpf_search_sort/DesignTimeBuild/.dtbcache.v2
  41. TEMPAT SAMPAH
      .vs/wpf_search_sort/FileContentIndex/bca124dd-befa-4245-b46e-5ba3fe3ad3f3.vsidx
  42. TEMPAT SAMPAH
      .vs/wpf_search_sort/v17/.futdcache.v2
  43. TEMPAT SAMPAH
      .vs/wpf_search_sort/v17/.suo
  44. TEMPAT SAMPAH
      .vs/wpf_template/FileContentIndex/0668294a-0a57-4f75-a6ca-1ad8b3f8a3e8.vsidx
  45. TEMPAT SAMPAH
      .vs/wpf_template/FileContentIndex/1a079fb6-60c8-4ed0-9e56-f41f8de9336a.vsidx
  46. TEMPAT SAMPAH
      .vs/wpf_template/FileContentIndex/1a6fb3aa-084d-4e24-bffd-ecd71e93fa24.vsidx
  47. TEMPAT SAMPAH
      .vs/wpf_template/FileContentIndex/2ae58230-2823-4c45-affb-9864c9a0915d.vsidx
  48. TEMPAT SAMPAH
      .vs/wpf_template/FileContentIndex/cd8c661f-c4c5-4b79-aa00-86662615a392.vsidx
  49. 9 0
      App.xaml
  50. 14 0
      App.xaml.cs
  51. 10 0
      AssemblyInfo.cs
  52. 198 0
      MainWindow.xaml
  53. 121 0
      MainWindow.xaml.cs
  54. 71 0
      Model/CSVDataProvider.cs
  55. 65 0
      Model/JSONDataProvider.cs
  56. 215 0
      Model/PhoneClass.cs
  57. 86 0
      Model/Windows/ProductDetailsWindow.xaml
  58. 41 0
      Model/Windows/ProductDetailsWindow.xaml.cs
  59. TEMPAT SAMPAH
      Model/Windows/img/defaultPicture.jpg
  60. TEMPAT SAMPAH
      assets/nagievlogo1.jpg
  61. TEMPAT SAMPAH
      assets/nagievlogo2.jpg
  62. TEMPAT SAMPAH
      bin/Debug/net8.0-windows/CsvHelper.dll
  63. 13 0
      bin/Debug/net8.0-windows/products.csv
  64. 123 0
      bin/Debug/net8.0-windows/products.json
  65. 41 0
      bin/Debug/net8.0-windows/wpf_app.deps.json
  66. TEMPAT SAMPAH
      bin/Debug/net8.0-windows/wpf_app.dll
  67. TEMPAT SAMPAH
      bin/Debug/net8.0-windows/wpf_app.exe
  68. TEMPAT SAMPAH
      bin/Debug/net8.0-windows/wpf_app.pdb
  69. 18 0
      bin/Debug/net8.0-windows/wpf_app.runtimeconfig.json
  70. 41 0
      bin/Debug/net8.0-windows/wpf_data_csv.deps.json
  71. TEMPAT SAMPAH
      bin/Debug/net8.0-windows/wpf_data_csv.dll
  72. TEMPAT SAMPAH
      bin/Debug/net8.0-windows/wpf_data_csv.exe
  73. TEMPAT SAMPAH
      bin/Debug/net8.0-windows/wpf_data_csv.pdb
  74. 18 0
      bin/Debug/net8.0-windows/wpf_data_csv.runtimeconfig.json
  75. TEMPAT SAMPAH
      img/defaultPicture.jpg
  76. TEMPAT SAMPAH
      img/result.png
  77. 4 0
      obj/Debug/net8.0-windows/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
  78. 71 0
      obj/Debug/net8.0-windows/App.g.cs
  79. 71 0
      obj/Debug/net8.0-windows/App.g.i.cs
  80. 62 0
      obj/Debug/net8.0-windows/GeneratedInternalTypeHelper.g.i.cs
  81. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/MainWindow.baml
  82. 197 0
      obj/Debug/net8.0-windows/MainWindow.g.cs
  83. 197 0
      obj/Debug/net8.0-windows/MainWindow.g.i.cs
  84. 76 0
      obj/Debug/net8.0-windows/Model/Windows/DetailProduct.g.i.cs
  85. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/Model/Windows/ProductDetailsWindow.baml
  86. 96 0
      obj/Debug/net8.0-windows/Model/Windows/ProductDetailsWindow.g.cs
  87. 96 0
      obj/Debug/net8.0-windows/Model/Windows/ProductDetailsWindow.g.i.cs
  88. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/apphost.exe
  89. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/ref/wpf_app.dll
  90. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/ref/wpf_data_csv.dll
  91. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/ref/wpf_filtering.dll
  92. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/ref/wpf_search_sort.dll
  93. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/ref/wpf_template.dll
  94. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/refint/wpf_app.dll
  95. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/refint/wpf_data_csv.dll
  96. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/refint/wpf_filtering.dll
  97. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/refint/wpf_search_sort.dll
  98. TEMPAT SAMPAH
      obj/Debug/net8.0-windows/refint/wpf_template.dll
  99. 25 0
      obj/Debug/net8.0-windows/wpf_app.AssemblyInfo.cs
  100. 1 0
      obj/Debug/net8.0-windows/wpf_app.AssemblyInfoInputs.cache

TEMPAT SAMPAH
.vs/333/FileContentIndex/3dedf0f2-885c-48f5-b8fa-316d51467a25.vsidx


TEMPAT SAMPAH
.vs/333/v17/.wsuo


+ 23 - 0
.vs/333/v17/DocumentLayout.json

@@ -0,0 +1,23 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\",
+  "Documents": [],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": -1,
+          "Children": [
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{1c64b9c2-e352-428e-a56d-0ace190b99a6}"
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_app.metadata.v7.bin


TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_app.projects.v7.bin


TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_data_csv.metadata.v7.bin


TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_data_csv.projects.v7.bin


TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_filtering.metadata.v7.bin


TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_filtering.projects.v7.bin


TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_search_sort.metadata.v7.bin


TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_search_sort.projects.v7.bin


TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_template.metadata.v7.bin


TEMPAT SAMPAH
.vs/ProjectEvaluation/wpf_template.projects.v7.bin


+ 3 - 0
.vs/ProjectSettings.json

@@ -0,0 +1,3 @@
+{
+  "CurrentProjectSetting": null
+}

+ 7 - 0
.vs/VSWorkspaceState.json

@@ -0,0 +1,7 @@
+{
+  "ExpandedNodes": [
+    "",
+    "\\Model"
+  ],
+  "PreviewInSolutionExplorer": false
+}

TEMPAT SAMPAH
.vs/slnx.sqlite


TEMPAT SAMPAH
.vs/wpf_app/DesignTimeBuild/.dtbcache.v2


TEMPAT SAMPAH
.vs/wpf_app/FileContentIndex/081e9c10-f179-41da-9690-e56a461bacd0.vsidx


TEMPAT SAMPAH
.vs/wpf_app/FileContentIndex/49b25c40-b024-48d0-9940-05702e2be3fd.vsidx


TEMPAT SAMPAH
.vs/wpf_app/FileContentIndex/630976dd-a223-403d-88b3-964eab683814.vsidx


TEMPAT SAMPAH
.vs/wpf_app/FileContentIndex/671fd6fa-1e9f-4542-9bd1-53686075ebb8.vsidx


TEMPAT SAMPAH
.vs/wpf_app/FileContentIndex/8d1094f4-19ca-4f5b-a1e5-3f9b5bb64bfb.vsidx


TEMPAT SAMPAH
.vs/wpf_app/v17/.futdcache.v2


TEMPAT SAMPAH
.vs/wpf_app/v17/.suo


+ 186 - 0
.vs/wpf_app/v17/DocumentLayout.json

@@ -0,0 +1,186 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\readme.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:readme.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\model\\windows\\productdetailswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:model\\windows\\productdetailswindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\model\\phoneclass.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:model\\phoneclass.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\model\\windows\\productdetailswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:model\\windows\\productdetailswindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\model\\csvdataprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:model\\csvdataprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\model\\jsondataprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:model\\jsondataprovider.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\wpf_app.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:wpf_app.csproj||{04B8AB82-A572-4FEF-95CE-5222444B6B64}|"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\wpf_app\\app.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_app.csproj|solutionrelative:app.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 0,
+          "Children": [
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "readme.md",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\readme.md",
+              "RelativeDocumentMoniker": "readme.md",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\readme.md",
+              "RelativeToolTip": "readme.md",
+              "ViewState": "AQIAAAAAAAAAAAAAAAAAAAcAAAAVAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001818|",
+              "WhenOpened": "2024-05-09T11:57:51.273Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 9,
+              "Title": "App.xaml",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\App.xaml",
+              "RelativeDocumentMoniker": "App.xaml",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\App.xaml",
+              "RelativeToolTip": "App.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2024-05-09T10:54:06.094Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 8,
+              "Title": "wpf_app",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\wpf_app.csproj",
+              "RelativeDocumentMoniker": "wpf_app.csproj",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\wpf_app.csproj",
+              "RelativeToolTip": "wpf_app.csproj",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000758|",
+              "WhenOpened": "2024-05-08T00:26:48.395Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 6,
+              "Title": "CSVDataProvider.cs",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\CSVDataProvider.cs",
+              "RelativeDocumentMoniker": "Model\\CSVDataProvider.cs",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\CSVDataProvider.cs",
+              "RelativeToolTip": "Model\\CSVDataProvider.cs",
+              "ViewState": "AQIAACkAAAAAAAAAAAAwwAkAAAARAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-05-06T17:35:22.457Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 7,
+              "Title": "JSONDataProvider.cs",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\JSONDataProvider.cs",
+              "RelativeDocumentMoniker": "Model\\JSONDataProvider.cs",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\JSONDataProvider.cs",
+              "RelativeToolTip": "Model\\JSONDataProvider.cs",
+              "ViewState": "AQIAAB0AAAAAAAAAAAAwwAkAAAABAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-05-06T17:35:22.49Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 4,
+              "Title": "PhoneClass.cs",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\PhoneClass.cs",
+              "RelativeDocumentMoniker": "Model\\PhoneClass.cs",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\PhoneClass.cs",
+              "RelativeToolTip": "Model\\PhoneClass.cs",
+              "ViewState": "AQIAACcAAAAAAAAAAAAAwDUAAABlAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-05-06T17:35:22.492Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "MainWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\MainWindow.xaml.cs",
+              "RelativeDocumentMoniker": "MainWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\MainWindow.xaml.cs",
+              "RelativeToolTip": "MainWindow.xaml.cs",
+              "ViewState": "AQIAABoAAAAAAAAAAIAwwBcAAAAvAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-05-06T17:35:22.494Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "MainWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\MainWindow.xaml",
+              "RelativeDocumentMoniker": "MainWindow.xaml",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\MainWindow.xaml",
+              "RelativeToolTip": "MainWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2024-05-06T17:35:22.497Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "ProductDetailsWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\Windows\\ProductDetailsWindow.xaml",
+              "RelativeDocumentMoniker": "Model\\Windows\\ProductDetailsWindow.xaml",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\Windows\\ProductDetailsWindow.xaml",
+              "RelativeToolTip": "Model\\Windows\\ProductDetailsWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2024-05-07T20:43:23.264Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 5,
+              "Title": "ProductDetailsWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\Windows\\ProductDetailsWindow.xaml.cs",
+              "RelativeDocumentMoniker": "Model\\Windows\\ProductDetailsWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\wpf_app\\Model\\Windows\\ProductDetailsWindow.xaml.cs",
+              "RelativeToolTip": "Model\\Windows\\ProductDetailsWindow.xaml.cs",
+              "ViewState": "AQIAAAwAAAAAAAAAAAAAACAAAAAuAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-05-07T20:43:31.133Z",
+              "EditorCaption": ""
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

TEMPAT SAMPAH
.vs/wpf_data_csv/FileContentIndex/4bd0ad83-385e-457f-b031-e945216ef341.vsidx


TEMPAT SAMPAH
.vs/wpf_data_csv/FileContentIndex/627afe6b-0a6c-4df6-a40e-64241d4425d0.vsidx


TEMPAT SAMPAH
.vs/wpf_data_csv/FileContentIndex/bed431ba-6255-4633-9c59-4193b8319f33.vsidx


TEMPAT SAMPAH
.vs/wpf_data_csv/FileContentIndex/cba83413-0261-4743-bb10-4e3c148b36e1.vsidx


TEMPAT SAMPAH
.vs/wpf_data_csv/FileContentIndex/f29c5c1e-274b-420f-9c5c-6534b2d9813d.vsidx


TEMPAT SAMPAH
.vs/wpf_filtering/DesignTimeBuild/.dtbcache.v2


TEMPAT SAMPAH
.vs/wpf_filtering/FileContentIndex/113a89ff-a931-4e8d-862a-01f3c86a443e.vsidx


TEMPAT SAMPAH
.vs/wpf_filtering/FileContentIndex/1e28b45a-6157-45cd-b72a-ab2c1210d6de.vsidx


TEMPAT SAMPAH
.vs/wpf_filtering/FileContentIndex/55b5e32a-b0cc-42fd-bb18-c0fcf1e53857.vsidx


TEMPAT SAMPAH
.vs/wpf_filtering/FileContentIndex/775bafd6-96fc-4bc6-8617-fd9c392a1fae.vsidx


TEMPAT SAMPAH
.vs/wpf_filtering/FileContentIndex/906c827d-01d6-4857-9ef5-875cc3e54e2c.vsidx


TEMPAT SAMPAH
.vs/wpf_filtering/v17/.futdcache.v2


TEMPAT SAMPAH
.vs/wpf_filtering/v17/.suo


+ 91 - 0
.vs/wpf_filtering/v17/DocumentLayout.json

@@ -0,0 +1,91 @@
+{
+  "Version": 1,
+  "WorkspaceRootPath": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\",
+  "Documents": [
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_filtering.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\333\\readme.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_filtering.csproj|solutionrelative:readme.md||{EFC0BB08-EA7D-40C6-A696-C870411A895B}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_search_sort.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\333\\mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_search_sort.csproj|solutionrelative:mainwindow.xaml.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_search_sort.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\333\\mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_search_sort.csproj|solutionrelative:mainwindow.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+    },
+    {
+      "AbsoluteMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_search_sort.csproj|c:\\users\\boooo\\onedrive\\desktop\\oap_labs\\333\\model\\phoneclass.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+      "RelativeMoniker": "D:0:0:{70FBD942-628F-4E82-9DCE-F11802729737}|wpf_search_sort.csproj|solutionrelative:model\\phoneclass.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+    }
+  ],
+  "DocumentGroupContainers": [
+    {
+      "Orientation": 0,
+      "VerticalTabListWidth": 256,
+      "DocumentGroups": [
+        {
+          "DockedWidth": 200,
+          "SelectedChildIndex": 4,
+          "Children": [
+            {
+              "$type": "Document",
+              "DocumentIndex": 3,
+              "Title": "PhoneClass.cs",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\Model\\PhoneClass.cs",
+              "RelativeDocumentMoniker": "Model\\PhoneClass.cs",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\Model\\PhoneClass.cs",
+              "RelativeToolTip": "Model\\PhoneClass.cs",
+              "ViewState": "AQIAACQAAAAAAAAAAAAiwAAAAAAAAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-05-05T16:37:00.308Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 2,
+              "Title": "MainWindow.xaml",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\MainWindow.xaml",
+              "RelativeDocumentMoniker": "MainWindow.xaml",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\MainWindow.xaml",
+              "RelativeToolTip": "MainWindow.xaml",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+              "WhenOpened": "2024-05-05T16:36:18.475Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 1,
+              "Title": "MainWindow.xaml.cs",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\MainWindow.xaml.cs",
+              "RelativeDocumentMoniker": "MainWindow.xaml.cs",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\MainWindow.xaml.cs",
+              "RelativeToolTip": "MainWindow.xaml.cs",
+              "ViewState": "AQIAAE8AAAAAAAAAAAAswFgAAAAAAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+              "WhenOpened": "2024-05-05T16:36:36.059Z",
+              "EditorCaption": ""
+            },
+            {
+              "$type": "Bookmark",
+              "Name": "ST:0:0:{1c64b9c2-e352-428e-a56d-0ace190b99a6}"
+            },
+            {
+              "$type": "Document",
+              "DocumentIndex": 0,
+              "Title": "readme.md",
+              "DocumentMoniker": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\readme.md",
+              "RelativeDocumentMoniker": "readme.md",
+              "ToolTip": "C:\\Users\\boooo\\OneDrive\\Desktop\\oap_labs\\333\\readme.md",
+              "RelativeToolTip": "readme.md",
+              "ViewState": "AQIAACsAAAAAAAAAAAAYwFEAAAAWAAAA",
+              "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.001818|",
+              "WhenOpened": "2024-05-05T16:35:22.795Z",
+              "EditorCaption": ""
+            }
+          ]
+        }
+      ]
+    }
+  ]
+}

TEMPAT SAMPAH
.vs/wpf_search_sort/DesignTimeBuild/.dtbcache.v2


TEMPAT SAMPAH
.vs/wpf_search_sort/FileContentIndex/bca124dd-befa-4245-b46e-5ba3fe3ad3f3.vsidx


TEMPAT SAMPAH
.vs/wpf_search_sort/v17/.futdcache.v2


TEMPAT SAMPAH
.vs/wpf_search_sort/v17/.suo


TEMPAT SAMPAH
.vs/wpf_template/FileContentIndex/0668294a-0a57-4f75-a6ca-1ad8b3f8a3e8.vsidx


TEMPAT SAMPAH
.vs/wpf_template/FileContentIndex/1a079fb6-60c8-4ed0-9e56-f41f8de9336a.vsidx


TEMPAT SAMPAH
.vs/wpf_template/FileContentIndex/1a6fb3aa-084d-4e24-bffd-ecd71e93fa24.vsidx


TEMPAT SAMPAH
.vs/wpf_template/FileContentIndex/2ae58230-2823-4c45-affb-9864c9a0915d.vsidx


TEMPAT SAMPAH
.vs/wpf_template/FileContentIndex/cd8c661f-c4c5-4b79-aa00-86662615a392.vsidx


+ 9 - 0
App.xaml

@@ -0,0 +1,9 @@
+<Application x:Class="wpf_app.App"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:local="clr-namespace:wpf_app"
+             StartupUri="MainWindow.xaml">
+    <Application.Resources>
+         
+    </Application.Resources>
+</Application>

+ 14 - 0
App.xaml.cs

@@ -0,0 +1,14 @@
+using System.Configuration;
+using System.Data;
+using System.Windows;
+
+namespace wpf_template
+{
+    /// <summary>
+    /// Interaction logic for App.xaml
+    /// </summary>
+    public partial class App : Application
+    {
+    }
+
+}

+ 10 - 0
AssemblyInfo.cs

@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+    ResourceDictionaryLocation.None,            //where theme specific resource dictionaries are located
+                                                //(used if a resource is not found in the page,
+                                                // or application resource dictionaries)
+    ResourceDictionaryLocation.SourceAssembly   //where the generic resource dictionary is located
+                                                //(used if a resource is not found in the page,
+                                                // app, or any theme specific resource dictionaries)
+)]

+ 198 - 0
MainWindow.xaml

@@ -0,0 +1,198 @@
+<Window x:Class="wpf_app.MainWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:wpf_app"
+        mc:Ignorable="d"
+        Title="Нагеев шоп" Height="450" Width="950">
+    
+    <Window.Resources>
+        <BitmapImage
+            x:Key='defaultImage'
+            UriSource="./img/defaultPicture.jpg"/>
+    </Window.Resources>
+
+    <Grid ShowGridLines="False">
+        <Grid.RowDefinitions>
+            <RowDefinition Height="auto"/>
+            <RowDefinition />
+            <RowDefinition Height="auto"/>
+        </Grid.RowDefinitions>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="200"/>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+
+
+        <Image 
+            Source="assets/nagievlogo2.jpg"
+            Grid.Row="0"
+            Grid.RowSpan="2"
+            Stretch="Fill"/>
+
+        <ListBox
+            x:Name="productsListBox"
+            Grid.Row="1"
+            Grid.Column="1"
+            Background="White"
+            ScrollViewer.HorizontalScrollBarVisibility="Disabled"
+            ItemsSource="{Binding ProductList}"
+            MouseDoubleClick="productsListBox_MouseDoubleClick">
+            
+
+            <ListBox.ItemsPanel>
+                <ItemsPanelTemplate>
+                    <WrapPanel
+                        HorizontalAlignment="Center"/>
+                </ItemsPanelTemplate>
+            </ListBox.ItemsPanel>
+            
+            <ListBox.ItemTemplate>
+                <DataTemplate>
+                    <Border
+                        BorderThickness="1"
+                        BorderBrush="Black"
+                        CornerRadius="5">
+                        <Grid
+                            Margin="10"
+                            Width="300"
+                            HorizontalAlignment="Stretch">
+                            <Grid.ColumnDefinitions>
+                                <ColumnDefinition Width="64"/>
+                                <ColumnDefinition Width="*"/>
+                                <ColumnDefinition Width="*"/>
+                            </Grid.ColumnDefinitions>
+                            <Image
+                                Width="64"
+                                Height="64"
+                                Source="{Binding ImageBitmap,TargetNullValue={StaticResource defaultImage}}"/>
+                            <StackPanel
+                                Grid.Column="1"
+                                Margin="5"
+                                Orientation="Vertical"
+                                VerticalAlignment="Center">
+                                <TextBlock
+                                    Text="{Binding Company}"/>
+                                <TextBlock
+                                    Text="{Binding Title}"/>
+                            </StackPanel>
+                            <WrapPanel
+                                Grid.Column="2"
+                                VerticalAlignment="Center"
+                                HorizontalAlignment="Right">
+                                <Label
+                                    Content="Цена:"/>
+                                <TextBlock
+                                    Grid.Column="2"
+                                    HorizontalAlignment="Right"
+                                    VerticalAlignment="Center"
+                                    Text="{Binding Price}"/>
+                            </WrapPanel>
+                        </Grid>
+                    </Border>
+                </DataTemplate>
+            </ListBox.ItemTemplate>
+        </ListBox>
+
+        <StackPanel 
+            Orientation="Vertical"
+            Grid.RowSpan="3"
+            Grid.Row="2"
+            VerticalAlignment="Bottom">
+            <Button 
+            x:Name="ExitButton"
+            Content="Выход" 
+            Click="ExitButton_Click"
+            Height="50"/>
+        </StackPanel>
+
+        
+
+        <WrapPanel
+            Orientation="Horizontal"
+            Grid.Column="1"
+            MinHeight="50"
+            Margin="0 5 0 0">
+            <Label
+                Content="Категория:"
+                VerticalAlignment="Center"/>
+
+            <ComboBox
+                Name="CategoryFilterComboBox"
+                SelectionChanged="CategoryFilterComboBox_SelectionChanged"
+                VerticalAlignment="Center"
+                MinWidth="100"
+                SelectedIndex="0"
+                ItemsSource="{Binding CategoryList}">
+
+                <ComboBox.ItemTemplate>
+                    <DataTemplate>
+                        <Label
+                            Content="{Binding title}"/>
+                    </DataTemplate>
+                </ComboBox.ItemTemplate>
+            </ComboBox>
+
+            <Label
+                Content="Цена"/>
+            <ComboBox
+                Name ="PriceFilterComboBox"
+                SelectionChanged="PriceFilterComboBox_SelectionChanged"
+                VerticalAlignment="Center"
+                MinWidth="100"
+                SelectedIndex="0"
+                ItemsSource="{Binding ProductPrices}">
+                <ComboBox.ItemTemplate>
+                    <DataTemplate>
+                        <Label
+                            Content="{Binding title}"/>
+                    </DataTemplate>
+                </ComboBox.ItemTemplate>
+            </ComboBox>
+
+            <Label
+                Content="Компания"/>
+            <ComboBox
+                Name ="CompanyFilterComboBox"
+                SelectionChanged="CompanyFilterComboBox_SelectionChanged"
+                VerticalAlignment="Center"
+                MinWidth="100"
+                SelectedIndex="0"
+                ItemsSource="{Binding ProductCompanies}">
+                <ComboBox.ItemTemplate>
+                    <DataTemplate>
+                        <Label
+                            Content="{Binding title}"/>
+                    </DataTemplate>
+                </ComboBox.ItemTemplate>
+            </ComboBox>
+
+            <Label 
+                Content="Поиск" 
+                VerticalAlignment="Center"/>
+            <TextBox
+                Width="180"
+                VerticalAlignment="Center"
+                x:Name="SearchFilterTextBox"
+                KeyUp="SearchFilterTextBox_KeyUp"/>
+
+            <Label 
+                Content="Цена:" 
+                VerticalAlignment="Center"/>
+            <RadioButton
+                GroupName="Price"
+                Tag="1"
+                Content="по возрастанию"
+                IsChecked="True"
+                Checked="RadioButton_Checked"
+                VerticalAlignment="Center"/>
+            <RadioButton
+                GroupName="Price"
+                Tag="2"
+                Content="по убыванию"
+                Checked="RadioButton_Checked"
+                VerticalAlignment="Center"/>
+        </WrapPanel>
+    </Grid>
+</Window>

+ 121 - 0
MainWindow.xaml.cs

@@ -0,0 +1,121 @@
+using System.ComponentModel;
+using System.Text;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using wpf_app.Model.Windows;
+using wpf_app.Model;
+
+namespace wpf_app
+{
+    /// <summary>
+    /// Interaction logic for MainWindow.xaml
+    /// </summary>
+    /// 
+    public partial class MainWindow : Window, INotifyPropertyChanged
+    {
+        private IEnumerable<Product> _productList;
+        public IEnumerable<Product> ProductList
+        {
+            get
+            {
+                var res = _productList;
+                res = _productList
+                    .Where(p =>(selectedCategory == "Все категории" || p.Category == selectedCategory))
+                    .Where(p =>(selectedPrice == null || (p.Price>=selectedPrice.priceFrom && p.Price<selectedPrice.priceTo)))
+                    .Where(p =>(selectedCompany == "Все компании" || p.Company == selectedCompany));
+
+                if (searchFilter != "")
+                    res = res.Where(c => c.Title.IndexOf(searchFilter, StringComparison.OrdinalIgnoreCase) >= 0);
+
+                if (sortAsc) res = res.OrderBy(p => p.Price);
+                else res = res.OrderByDescending(p => p.Price);
+
+                return res;
+            }
+            set
+            {
+                _productList = value;
+            }
+        }
+        public List <ProductCategory> CategoryList { get; set; }
+        public List <ProductPrice> ProductPrices { get; set; }
+        public List <ProductCompany> ProductCompanies { get; set; }
+        string selectedCategory = "";
+        string selectedCompany = "";
+        private ProductPrice? selectedPrice = null;
+        private string searchFilter = "";
+        private bool sortAsc = true;
+        public MainWindow()
+        {
+            InitializeComponent();
+            DataContext = this;
+            Globals.dataProvider = new JSONDataProvider(); 
+            ProductList = Globals.dataProvider.GetProducts();
+            ProductPrices = Globals.dataProvider.GetPrices().ToList();
+            CategoryList = Globals.dataProvider.GetCategories().ToList();
+            CategoryList.Insert(0, new ProductCategory { title = "Все категории" });
+            ProductCompanies = Globals.dataProvider.GetCompanies().ToList();
+            ProductCompanies.Insert(0, new ProductCompany { title = "Все компании" });
+        }
+
+        private void ExitButton_Click(object sender, RoutedEventArgs e)
+        {
+            Application.Current.Shutdown();
+        }
+
+        private void CategoryFilterComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            selectedCategory = (CategoryFilterComboBox.SelectedItem as ProductCategory).title;
+            Invalidate();
+        }
+
+        private void PriceFilterComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            selectedPrice = PriceFilterComboBox.SelectedItem as ProductPrice;
+            Invalidate();
+        }
+
+        private void CompanyFilterComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
+        {
+            selectedCompany = (CompanyFilterComboBox.SelectedItem as ProductCompany).title;
+            Invalidate();
+        }
+
+        private void SearchFilterTextBox_KeyUp(object sender, KeyEventArgs e)
+        {
+            searchFilter = SearchFilterTextBox.Text;
+            Invalidate();
+        }
+
+        private void RadioButton_Checked(object sender, RoutedEventArgs e)
+        {
+            sortAsc = (sender as RadioButton).Tag.ToString() == "1";
+            Invalidate();
+        }
+
+        private void productsListBox_MouseDoubleClick(object sender, MouseButtonEventArgs e)
+        {
+            var productDetailsWindow = new ProductDetailsWindow(productsListBox.SelectedItem as Product);
+            productDetailsWindow.Show();
+        }
+
+        public event PropertyChangedEventHandler PropertyChanged;
+        private void Invalidate()
+        {
+            if (PropertyChanged != null)
+                PropertyChanged(this, new PropertyChangedEventArgs("ProductList"));
+        }
+    }
+
+    class Globals
+    {
+        public static IDataProvider dataProvider;
+    }
+}

+ 71 - 0
Model/CSVDataProvider.cs

@@ -0,0 +1,71 @@
+using CsvHelper;
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace wpf_app.Model
+{
+    public class CSVDataProvider : IDataProvider
+    {
+        private List<Product> productList;
+        public CSVDataProvider()
+        {
+            using (var reader = new StreamReader("./products.csv"))
+            {
+                using (var csv = new CsvReader(
+                    reader,
+                    CultureInfo.InvariantCulture))
+                {
+                    productList = csv.GetRecords<Product>().ToList();
+                }
+            }
+        }
+
+        public IEnumerable<Product> GetProducts()
+        {
+            return productList;
+        }
+
+        public IEnumerable<ProductCategory> GetCategories()
+        {
+            return new ProductCategory[]
+            {
+                new ProductCategory {title = "Смартфон"},
+                new ProductCategory {title = "Ноутбук"},
+                new ProductCategory {title = "Смарт-Часы"},
+                new ProductCategory {title = "Монитор"}
+            };
+        }
+
+        public IEnumerable<ProductPrice> GetPrices()
+        {
+            return new ProductPrice[]
+            {
+                new ProductPrice{title="Все цены", priceFrom = 0, priceTo = 999999},
+                new ProductPrice{title="До 10.000", priceFrom = 0, priceTo = 10000},
+                new ProductPrice{title="От 10.000 до 20.000", priceFrom = 10000, priceTo = 20000},
+                new ProductPrice{title="От 20.000 до 50.000", priceFrom = 20000, priceTo = 50000},
+                new ProductPrice{title="Дороже 50.000", priceFrom = 50000, priceTo = 999999 }
+            };
+        }
+        public IEnumerable<ProductCompany> GetCompanies()
+        {
+            return new ProductCompany[]
+            {
+                new ProductCompany{title = "Apple"},
+                new ProductCompany{title = "Xiaomi"},
+                new ProductCompany{title = "Huawei"},
+                new ProductCompany{title = "POCO"},
+                new ProductCompany{title = "Asus"},
+                new ProductCompany{title = "Lenovo"},
+                new ProductCompany{title = "Samsung"},
+                new ProductCompany{title = "Acer"},
+                new ProductCompany{title = "AOC"}
+            };
+        }
+    }
+}

+ 65 - 0
Model/JSONDataProvider.cs

@@ -0,0 +1,65 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.Serialization.Json;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace wpf_app.Model
+{
+    public class JSONDataProvider : IDataProvider
+    {
+        private List<Product> products;
+        public JSONDataProvider() 
+        {
+            var serializer = new DataContractJsonSerializer(typeof(Product[]));
+            using(var sr = new StreamReader("./products.json"))
+            {
+                products = ((Product[])serializer.ReadObject(sr.BaseStream)).ToList();
+            }
+        }
+        public IEnumerable<Product> GetProducts()
+        {
+            return products;
+        }
+
+        public IEnumerable<ProductCategory> GetCategories()
+        {
+            return new ProductCategory[]
+            {
+                new ProductCategory {title = "Смартфон"},
+                new ProductCategory {title = "Ноутбук"},
+                new ProductCategory {title = "Смарт-Часы"},
+                new ProductCategory {title = "Монитор"}
+            };
+        }
+
+        public IEnumerable<ProductPrice> GetPrices()
+        {
+            return new ProductPrice[]
+            {
+                new ProductPrice{title="Все цены", priceFrom = 0, priceTo = 999999},
+                new ProductPrice{title="До 10.000", priceFrom = 0, priceTo = 10000},
+                new ProductPrice{title="От 10.000 до 20.000", priceFrom = 10000, priceTo = 20000},
+                new ProductPrice{title="От 20.000 до 50.000", priceFrom = 20000, priceTo = 50000},
+                new ProductPrice{title="Дороже 50.000", priceFrom = 50000, priceTo = 999999 }
+            };
+        }
+        public IEnumerable<ProductCompany> GetCompanies()
+        {
+            return new ProductCompany[]
+            {
+                new ProductCompany{title = "Apple"},
+                new ProductCompany{title = "Xiaomi"},
+                new ProductCompany{title = "Huawei"},
+                new ProductCompany{title = "POCO"},
+                new ProductCompany{title = "Asus"},
+                new ProductCompany{title = "Lenovo"},
+                new ProductCompany{title = "Samsung"},
+                new ProductCompany{title = "Acer"},
+                new ProductCompany{title = "AOC"}
+            };
+        }
+    }
+}

+ 215 - 0
Model/PhoneClass.cs

@@ -0,0 +1,215 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Formats.Asn1;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Runtime.Serialization;
+using System.Text;
+using System.Threading.Tasks;
+using CsvHelper;
+
+namespace wpf_app.Model
+{
+    [DataContract]
+    public class Product
+    {
+        [DataMember]
+        public string Title { get; set; }
+        [DataMember]
+        public string Company { get; set; }
+        [DataMember]
+        public int Price { get; set; }
+        [DataMember]
+        public string Category { get; set; }
+        [DataMember]
+        public bool Existence {  get; set; }
+        [DataMember(Name = "ArrivalDate")]
+        private string? stringArrivalDate { get; set; }
+        [IgnoreDataMember]
+        public DateOnly? ArrivalDate
+        {
+            get
+            {
+                return stringArrivalDate == null ? null : DateOnly.Parse(stringArrivalDate);
+            }
+            set
+            {
+                stringArrivalDate = value.ToString();
+            }
+        }
+        [DataMember]
+        public double Rating { get; set; }
+        [DataMember]
+        public string Photo { get; set; }
+        [IgnoreDataMember]
+        public string ExistenceString
+        {
+            get 
+            {
+                return Existence ? "Да" : "Нет";
+            }
+        }
+        public string ExistenceStringS { get { return Existence ? "Товар в наличии" : "Нет в наличии"; } }
+        public Uri? ImageBitmap
+        {
+            get
+            {
+                var imageName = Environment.CurrentDirectory + "/img/" + (Photo ?? "");
+                return System.IO.File.Exists(imageName) ? new Uri(imageName) : null;
+            }
+        }
+        public string WindowTitle { get { return $"{Company} {Title}"; }}
+    }
+
+    public class ProductCategory
+    {
+        public string title { get; set; }
+    }
+
+    public class ProductPrice
+    {
+        public string title { get; set; }
+        public int priceFrom { get; set; }
+        public int priceTo { get; set; }
+    }
+
+    public class ProductCompany
+    {
+        public string title { get; set; }
+    }
+
+    interface IDataProvider
+    {
+        IEnumerable<Product> GetProducts();
+        IEnumerable<ProductCategory> GetCategories();
+        IEnumerable<ProductPrice> GetPrices();
+        IEnumerable<ProductCompany> GetCompanies();
+    }
+
+    public class LocalDataProvider : IDataProvider
+    {
+        public IEnumerable<Product> GetProducts()
+        {
+            return new Product[]{
+            new Product
+            {
+                Category = "Смартфон",
+                Company = "Apple",
+                Title = "13 Pro Max",
+                Price = 84999
+            },
+            new Product
+            {
+                Category = "Смартфон",
+                Company = "Samsung",
+                Title = "S23",
+                Price = 89999
+            },
+            new Product
+            {
+                Category = "Смартфон",
+                Company = "Huawei",
+                Title = "Nova Y61",
+                Price = 9999
+            },
+            new Product
+            {
+                Category = "Смартфон",
+                Company = "POCO",
+                Title = "C51",
+                Price = 5599
+            },
+            new Product
+            {
+                Category = "Ноутбук",
+                Company = "Xiaomi",
+                Title = "RedmiBook 15",
+                Price = 49999
+            },
+            new Product
+            {
+                Category = "Ноутбук",
+                Company = "Asus",
+                Title = "Vivobook Go 15",
+                Price = 25999
+            },
+            new Product
+            {
+                Category = "Ноутбук",
+                Company = "Lenovo",
+                Title = "IdeaPad 1",
+                Price = 24999
+            },
+            new Product
+            {
+                Category = "Ноутбук",
+                Company = "Asus",
+                Title = "ExpertBook B1502",
+                Price = 32999
+            },
+            new Product
+            {
+                Category = "Смарт-Часы",
+                Company = "Apple",
+                Title = "SE 2023",
+                Price = 30599
+            },
+            new Product
+            {
+                Category = "Смарт-Часы",
+                Company = "Xiaomi",
+                Title = "Smart Band 8",
+                Price = 3999
+            },
+            new Product
+            {
+                Category = "Смарт-Часы",
+                Company = "Huawei",
+                Title = "Watch GT 4",
+                Price = 13999
+            },
+
+            };
+        }
+
+        public IEnumerable<ProductCategory> GetCategories()
+        {
+            return new ProductCategory[]
+            {
+                new ProductCategory {title = "Смартфон"},
+                new ProductCategory {title = "Ноутбук"},
+                new ProductCategory {title = "Смарт-Часы"},
+                new ProductCategory {title = "Монитор"}
+            };
+        }
+
+        public IEnumerable<ProductPrice> GetPrices()
+        {
+            return new ProductPrice[]
+            {
+                new ProductPrice{title="Все цены", priceFrom = 0, priceTo = 999999},
+                new ProductPrice{title="До 10.000", priceFrom = 0, priceTo = 10000},
+                new ProductPrice{title="От 10.000 до 20.000", priceFrom = 10000, priceTo = 20000},
+                new ProductPrice{title="От 20.000 до 50.000", priceFrom = 20000, priceTo = 50000},
+                new ProductPrice{title="Дороже 50.000", priceFrom = 50000, priceTo = 999999 }
+            };
+        }
+        public IEnumerable<ProductCompany> GetCompanies()
+        {
+            return new ProductCompany[]
+            {
+                new ProductCompany{title = "Apple"},
+                new ProductCompany{title = "Xiaomi"},
+                new ProductCompany{title = "Huawei"},
+                new ProductCompany{title = "POCO"},
+                new ProductCompany{title = "Asus"},
+                new ProductCompany{title = "Lenovo"},
+                new ProductCompany{title = "Samsung"},
+                new ProductCompany{title = "Acer"},
+                new ProductCompany{title = "AOC"}
+            };
+        }
+    }
+}

+ 86 - 0
Model/Windows/ProductDetailsWindow.xaml

@@ -0,0 +1,86 @@
+<Window x:Class="wpf_app.Model.Windows.ProductDetailsWindow"
+        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+        xmlns:local="clr-namespace:wpf_app.Model.Windows"
+        mc:Ignorable="d"
+        Title="{Binding WindowTitle}" Height="400" Width="700">
+
+    <Window.Resources>
+        <BitmapImage
+            x:Key='defaultImage'
+            UriSource="./img/defaultPicture.jpg"/>
+    </Window.Resources>
+
+    <Grid>
+        <Grid.ColumnDefinitions>
+            <ColumnDefinition Width="250"/>
+            <ColumnDefinition/>
+        </Grid.ColumnDefinitions>
+        <Grid.RowDefinitions>
+            <RowDefinition Height="50"/>
+            <RowDefinition/>
+            <RowDefinition Height="50"/>
+        </Grid.RowDefinitions>
+
+        <Border
+            Grid.Row="0"
+            Grid.RowSpan="3"
+            BorderBrush="Black"
+            BorderThickness="2"
+            CornerRadius="5"
+            Margin="5 5 5 5">
+            <Image
+            Source="{Binding ImageBitmap, TargetNullValue={StaticResource defaultImage}}"
+                Stretch="Fill"/>
+        </Border>
+
+        <TextBlock
+            Grid.Column="1"
+            Margin="20 0 0 0"
+            FontSize="25">
+                <Run Text="{Binding Category}"/>
+                <Run Text="{Binding Company}"/>
+                <Run Text="{Binding Title}"/>
+        </TextBlock>
+
+        <StackPanel
+            Grid.Column="1"
+            Grid.Row="1"
+            TextElement.FontSize="15"
+            Margin="20 0 0 0">
+            <TextBlock Text="Категория товара: ">
+                <Run Text="{Binding Category}"/>
+            </TextBlock>
+            <TextBlock Text="Компания: ">
+                <Run Text="{Binding Company}"/>
+            </TextBlock>
+            <TextBlock Text="Название товара: ">
+                <Run Text="{Binding Title}"/>
+            </TextBlock>
+            <TextBlock Text="Оценка покупателей: ">
+                <Run Text="{Binding Rating}"/>
+            </TextBlock>
+            <TextBlock Text="Дата поступления: ">
+                <Run Text="{Binding ArrivalDate}"/>
+            </TextBlock>
+            <TextBlock Text="{Binding ExistenceStringS}"/>
+            <TextBlock Text="Цена: ">
+                <Run Text="{Binding Price}"/>
+            </TextBlock>
+        </StackPanel>
+
+        <Button
+            x:Name="ExitButton"
+            Grid.Column="1"
+            Grid.Row="2"
+            Width="150"
+            VerticalAlignment="Center"
+            HorizontalAlignment="Right"
+            Margin="10"
+            IsCancel="True"
+            Content="Закрыть"
+            Click="ExitButton_Click"/>
+    </Grid>
+</Window>

+ 41 - 0
Model/Windows/ProductDetailsWindow.xaml.cs

@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using wpf_app.Model;
+
+namespace wpf_app.Model.Windows
+{
+    /// <summary>
+    /// Логика взаимодействия для ProductDetailsWindow.xaml
+    /// </summary>
+    public partial class ProductDetailsWindow : Window
+    {
+        public Product currentProduct { get; set; }
+        
+        public ProductDetailsWindow()
+        {
+            InitializeComponent();
+        }
+        public ProductDetailsWindow(Product currentProduct)
+        {
+            this.currentProduct = currentProduct;
+            InitializeComponent();
+            this.DataContext = currentProduct;
+        }
+
+        private void ExitButton_Click(object sender, RoutedEventArgs e)
+        {
+            this.Close();
+        }
+    }
+}

TEMPAT SAMPAH
Model/Windows/img/defaultPicture.jpg


TEMPAT SAMPAH
assets/nagievlogo1.jpg


TEMPAT SAMPAH
assets/nagievlogo2.jpg


TEMPAT SAMPAH
bin/Debug/net8.0-windows/CsvHelper.dll


+ 13 - 0
bin/Debug/net8.0-windows/products.csv

@@ -0,0 +1,13 @@
+Title,Company,Price,Category,Existence,ArrivalDate,Rating,Photo
+"Redmi A3","Xiaomi",6999,"Смартфон",True,2023-12-15,3.9,""
+"12","Xiaomi",44999,"Смартфон",True,2024-03-21,4.7,""
+"iPhone 11 Pro","Apple",48999,"Смартфон",False,2023-09-19,4.3,""
+"iPhone SE 2022","Apple",36999,"Смартфон",False,2023-10-25,4.1,""
+"Galaxy S22","Samsung",61299,"Смартфон",True,2024-02-21,4.8,""
+"Redmi Watch 2","Xiaomi",5299,"Смарт-Часы",True,2023-11-09,3.2,""
+"ExpertBook B1","Asus",33999,"Ноутбук",True,2023-01-09,4,""
+"MateBook D 15","Huawei",44999,"Ноутбук",False,2023-08-17,4.4,""
+"Watch SE 2022","Apple",29499,"Смарт-Часы",True,2023-08-29,3.8,""
+"R272ymix","Acer",10999,"Монитор",True,2023-11-11,4.6,""
+"27B3HM","AOC",12999,"Монитор",True,2024-04-05,4.7,""
+"Watch Ultra 49mm","Apple",75999,"Смарт-Часы",False,2023-05-06,4.8,""

+ 123 - 0
bin/Debug/net8.0-windows/products.json

@@ -0,0 +1,123 @@
+[
+    {
+        "Title":"Redmi A3",
+        "Company":"Xiaomi",
+        "Price": 6999,
+        "Category": "Смартфон",
+        "Existence": true,
+        "ArrivalDate": "2023-12-15",
+        "Rating": 3.9,
+        "Photo": null
+    },
+    {
+        "Title":"12",
+        "Company":"Xiaomi",
+        "Price": 44999,
+        "Category": "Смартфон",
+        "Existence": true,
+        "ArrivalDate": "2024-03-21",
+        "Rating": 4.7,
+        "Photo": null
+    },
+    {
+        "Title":"iPhone 11 Pro",
+        "Company":"Apple",
+        "Price": 48999,
+        "Category": "Смартфон",
+        "Existence": false,
+        "ArrivalDate": "2023-09-19",
+        "Rating": 4.3,
+        "Photo": null
+    },
+    {
+        "Title":"iPhone SE 2022",
+        "Company":"Apple",
+        "Price": 36999,
+        "Category": "Смартфон",
+        "Existence": false,
+        "ArrivalDate": "2023-10-25",
+        "Rating": 4.1,
+        "Photo": null
+    },
+    {
+        "Title":"Galaxy S22",
+        "Company":"Samsung",
+        "Price": 61299,
+        "Category": "Смартфон",
+        "Existence": true,
+        "ArrivalDate": "2024-02-21",
+        "Rating": 4.8,
+        "Photo": null
+    },
+    {
+        "Title":"Redmi Watch 2",
+        "Company":"Xiaomi",
+        "Price": 5299,
+        "Category": "Смарт-Часы",
+        "Existence": true,
+        "ArrivalDate": "2023-11-09",
+        "Rating": 3.2,
+        "Photo": null
+    },
+    {
+        "Title":"ExpertBook B1",
+        "Company":"Asus",
+        "Price": 33999,
+        "Category": "Ноутбук",
+        "Existence": true,
+        "ArrivalDate": "2023-01-09",
+        "Rating": 4,
+        "Photo": null
+    },
+    {
+        "Title":"MateBook D 15",
+        "Company":"Huawei",
+        "Price": 44999,
+        "Category": "Ноутбук",
+        "Existence": false,
+        "ArrivalDate": "2023-08-17",
+        "Rating": 4.4,
+        "Photo": null
+    },
+    {
+        "Title":"Watch SE 2022",
+        "Company":"Apple",
+        "Price": 29499,
+        "Category": "Смарт-Часы",
+        "Existence": true,
+        "ArrivalDate": "2023-08-29",
+        "Rating": 3.8,
+        "Photo": null
+    },
+    {
+        "Title":"R272ymix",
+        "Company":"Acer",
+        "Price": 10999,
+        "Category": "Монитор",
+        "Existence": true,
+        "ArrivalDate": "2023-11-11",
+        "Rating": 4.6,
+        "Photo": null
+    },
+    {
+        "Title":"27B3HM",
+        "Company":"AOC",
+        "Price": 12999,
+        "Category": "Монитор",
+        "Existence": true,
+        "ArrivalDate": "2024-04-05",
+        "Rating": 4.7,
+        "Photo": null
+    },
+    {
+        "Title":"Watch Ultra 49mm",
+        "Company":"Apple",
+        "Price": 75999,
+        "Category": "Смарт-Часы",
+        "Existence": false,
+        "ArrivalDate": "2023-05-06",
+        "Rating": 4.8,
+        "Photo": null
+    },
+
+]

+ 41 - 0
bin/Debug/net8.0-windows/wpf_app.deps.json

@@ -0,0 +1,41 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v8.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v8.0": {
+      "wpf_app/1.0.0": {
+        "dependencies": {
+          "CsvHelper": "32.0.1"
+        },
+        "runtime": {
+          "wpf_app.dll": {}
+        }
+      },
+      "CsvHelper/32.0.1": {
+        "runtime": {
+          "lib/net8.0/CsvHelper.dll": {
+            "assemblyVersion": "32.0.0.0",
+            "fileVersion": "32.0.1.20"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "wpf_app/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    },
+    "CsvHelper/32.0.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-1sPpPUlSGCU2BRZmU+NZ2Le/AO2BBQTRZPZvNmfIgrDiVgLC6oD6b9QDFFf5AHhNsU+cAAbGoAcnnWq5a7VPlw==",
+      "path": "csvhelper/32.0.1",
+      "hashPath": "csvhelper.32.0.1.nupkg.sha512"
+    }
+  }
+}

TEMPAT SAMPAH
bin/Debug/net8.0-windows/wpf_app.dll


TEMPAT SAMPAH
bin/Debug/net8.0-windows/wpf_app.exe


TEMPAT SAMPAH
bin/Debug/net8.0-windows/wpf_app.pdb


+ 18 - 0
bin/Debug/net8.0-windows/wpf_app.runtimeconfig.json

@@ -0,0 +1,18 @@
+{
+  "runtimeOptions": {
+    "tfm": "net8.0",
+    "frameworks": [
+      {
+        "name": "Microsoft.NETCore.App",
+        "version": "8.0.0"
+      },
+      {
+        "name": "Microsoft.WindowsDesktop.App",
+        "version": "8.0.0"
+      }
+    ],
+    "configProperties": {
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true
+    }
+  }
+}

+ 41 - 0
bin/Debug/net8.0-windows/wpf_data_csv.deps.json

@@ -0,0 +1,41 @@
+{
+  "runtimeTarget": {
+    "name": ".NETCoreApp,Version=v8.0",
+    "signature": ""
+  },
+  "compilationOptions": {},
+  "targets": {
+    ".NETCoreApp,Version=v8.0": {
+      "wpf_data_csv/1.0.0": {
+        "dependencies": {
+          "CsvHelper": "32.0.1"
+        },
+        "runtime": {
+          "wpf_data_csv.dll": {}
+        }
+      },
+      "CsvHelper/32.0.1": {
+        "runtime": {
+          "lib/net8.0/CsvHelper.dll": {
+            "assemblyVersion": "32.0.0.0",
+            "fileVersion": "32.0.1.20"
+          }
+        }
+      }
+    }
+  },
+  "libraries": {
+    "wpf_data_csv/1.0.0": {
+      "type": "project",
+      "serviceable": false,
+      "sha512": ""
+    },
+    "CsvHelper/32.0.1": {
+      "type": "package",
+      "serviceable": true,
+      "sha512": "sha512-1sPpPUlSGCU2BRZmU+NZ2Le/AO2BBQTRZPZvNmfIgrDiVgLC6oD6b9QDFFf5AHhNsU+cAAbGoAcnnWq5a7VPlw==",
+      "path": "csvhelper/32.0.1",
+      "hashPath": "csvhelper.32.0.1.nupkg.sha512"
+    }
+  }
+}

TEMPAT SAMPAH
bin/Debug/net8.0-windows/wpf_data_csv.dll


TEMPAT SAMPAH
bin/Debug/net8.0-windows/wpf_data_csv.exe


TEMPAT SAMPAH
bin/Debug/net8.0-windows/wpf_data_csv.pdb


+ 18 - 0
bin/Debug/net8.0-windows/wpf_data_csv.runtimeconfig.json

@@ -0,0 +1,18 @@
+{
+  "runtimeOptions": {
+    "tfm": "net8.0",
+    "frameworks": [
+      {
+        "name": "Microsoft.NETCore.App",
+        "version": "8.0.0"
+      },
+      {
+        "name": "Microsoft.WindowsDesktop.App",
+        "version": "8.0.0"
+      }
+    ],
+    "configProperties": {
+      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true
+    }
+  }
+}

TEMPAT SAMPAH
img/defaultPicture.jpg


TEMPAT SAMPAH
img/result.png


+ 4 - 0
obj/Debug/net8.0-windows/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs

@@ -0,0 +1,4 @@
+// <autogenerated />
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]

+ 71 - 0
obj/Debug/net8.0-windows/App.g.cs

@@ -0,0 +1,71 @@
+#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "D7192148B142C00FDAB7EC80B9F7871DAA67C983"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using wpf_app;
+
+
+namespace wpf_app {
+    
+    
+    /// <summary>
+    /// App
+    /// </summary>
+    public partial class App : System.Windows.Application {
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        public void InitializeComponent() {
+            
+            #line 5 "..\..\..\App.xaml"
+            this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
+            
+            #line default
+            #line hidden
+        }
+        
+        /// <summary>
+        /// Application Entry Point.
+        /// </summary>
+        [System.STAThreadAttribute()]
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        public static void Main() {
+            wpf_app.App app = new wpf_app.App();
+            app.InitializeComponent();
+            app.Run();
+        }
+    }
+}
+

+ 71 - 0
obj/Debug/net8.0-windows/App.g.i.cs

@@ -0,0 +1,71 @@
+#pragma checksum "..\..\..\App.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "D7192148B142C00FDAB7EC80B9F7871DAA67C983"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using wpf_app;
+
+
+namespace wpf_app {
+    
+    
+    /// <summary>
+    /// App
+    /// </summary>
+    public partial class App : System.Windows.Application {
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        public void InitializeComponent() {
+            
+            #line 5 "..\..\..\App.xaml"
+            this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
+            
+            #line default
+            #line hidden
+        }
+        
+        /// <summary>
+        /// Application Entry Point.
+        /// </summary>
+        [System.STAThreadAttribute()]
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        public static void Main() {
+            wpf_app.App app = new wpf_app.App();
+            app.InitializeComponent();
+            app.Run();
+        }
+    }
+}
+

+ 62 - 0
obj/Debug/net8.0-windows/GeneratedInternalTypeHelper.g.i.cs

@@ -0,0 +1,62 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace XamlGeneratedNamespace {
+    
+    
+    /// <summary>
+    /// GeneratedInternalTypeHelper
+    /// </summary>
+    [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+    [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+    public sealed class GeneratedInternalTypeHelper : System.Windows.Markup.InternalTypeHelper {
+        
+        /// <summary>
+        /// CreateInstance
+        /// </summary>
+        protected override object CreateInstance(System.Type type, System.Globalization.CultureInfo culture) {
+            return System.Activator.CreateInstance(type, ((System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic) 
+                            | (System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.CreateInstance)), null, null, culture);
+        }
+        
+        /// <summary>
+        /// GetPropertyValue
+        /// </summary>
+        protected override object GetPropertyValue(System.Reflection.PropertyInfo propertyInfo, object target, System.Globalization.CultureInfo culture) {
+            return propertyInfo.GetValue(target, System.Reflection.BindingFlags.Default, null, null, culture);
+        }
+        
+        /// <summary>
+        /// SetPropertyValue
+        /// </summary>
+        protected override void SetPropertyValue(System.Reflection.PropertyInfo propertyInfo, object target, object value, System.Globalization.CultureInfo culture) {
+            propertyInfo.SetValue(target, value, System.Reflection.BindingFlags.Default, null, null, culture);
+        }
+        
+        /// <summary>
+        /// CreateDelegate
+        /// </summary>
+        protected override System.Delegate CreateDelegate(System.Type delegateType, object target, string handler) {
+            return ((System.Delegate)(target.GetType().InvokeMember("_CreateDelegate", (System.Reflection.BindingFlags.InvokeMethod 
+                            | (System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)), null, target, new object[] {
+                        delegateType,
+                        handler}, null)));
+        }
+        
+        /// <summary>
+        /// AddEventHandler
+        /// </summary>
+        protected override void AddEventHandler(System.Reflection.EventInfo eventInfo, object target, System.Delegate handler) {
+            eventInfo.AddEventHandler(target, handler);
+        }
+    }
+}
+

TEMPAT SAMPAH
obj/Debug/net8.0-windows/MainWindow.baml


+ 197 - 0
obj/Debug/net8.0-windows/MainWindow.g.cs

@@ -0,0 +1,197 @@
+#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "76332CE0793564ED4AE4B63D8B5294463661C499"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using wpf_app;
+
+
+namespace wpf_app {
+    
+    
+    /// <summary>
+    /// MainWindow
+    /// </summary>
+    public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 35 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ListBox productsListBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 104 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button ExitButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 122 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ComboBox CategoryFilterComboBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 140 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ComboBox PriceFilterComboBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 157 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ComboBox CompanyFilterComboBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 177 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TextBox SearchFilterTextBox;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/wpf_app;component/mainwindow.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\MainWindow.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.productsListBox = ((System.Windows.Controls.ListBox)(target));
+            
+            #line 41 "..\..\..\MainWindow.xaml"
+            this.productsListBox.MouseDoubleClick += new System.Windows.Input.MouseButtonEventHandler(this.productsListBox_MouseDoubleClick);
+            
+            #line default
+            #line hidden
+            return;
+            case 2:
+            this.ExitButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 106 "..\..\..\MainWindow.xaml"
+            this.ExitButton.Click += new System.Windows.RoutedEventHandler(this.ExitButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 3:
+            this.CategoryFilterComboBox = ((System.Windows.Controls.ComboBox)(target));
+            
+            #line 123 "..\..\..\MainWindow.xaml"
+            this.CategoryFilterComboBox.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.CategoryFilterComboBox_SelectionChanged);
+            
+            #line default
+            #line hidden
+            return;
+            case 4:
+            this.PriceFilterComboBox = ((System.Windows.Controls.ComboBox)(target));
+            
+            #line 141 "..\..\..\MainWindow.xaml"
+            this.PriceFilterComboBox.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.PriceFilterComboBox_SelectionChanged);
+            
+            #line default
+            #line hidden
+            return;
+            case 5:
+            this.CompanyFilterComboBox = ((System.Windows.Controls.ComboBox)(target));
+            
+            #line 158 "..\..\..\MainWindow.xaml"
+            this.CompanyFilterComboBox.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.CompanyFilterComboBox_SelectionChanged);
+            
+            #line default
+            #line hidden
+            return;
+            case 6:
+            this.SearchFilterTextBox = ((System.Windows.Controls.TextBox)(target));
+            
+            #line 178 "..\..\..\MainWindow.xaml"
+            this.SearchFilterTextBox.KeyUp += new System.Windows.Input.KeyEventHandler(this.SearchFilterTextBox_KeyUp);
+            
+            #line default
+            #line hidden
+            return;
+            case 7:
+            
+            #line 188 "..\..\..\MainWindow.xaml"
+            ((System.Windows.Controls.RadioButton)(target)).Checked += new System.Windows.RoutedEventHandler(this.RadioButton_Checked);
+            
+            #line default
+            #line hidden
+            return;
+            case 8:
+            
+            #line 194 "..\..\..\MainWindow.xaml"
+            ((System.Windows.Controls.RadioButton)(target)).Checked += new System.Windows.RoutedEventHandler(this.RadioButton_Checked);
+            
+            #line default
+            #line hidden
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

+ 197 - 0
obj/Debug/net8.0-windows/MainWindow.g.i.cs

@@ -0,0 +1,197 @@
+#pragma checksum "..\..\..\MainWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "76332CE0793564ED4AE4B63D8B5294463661C499"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using wpf_app;
+
+
+namespace wpf_app {
+    
+    
+    /// <summary>
+    /// MainWindow
+    /// </summary>
+    public partial class MainWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 35 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ListBox productsListBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 104 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button ExitButton;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 122 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ComboBox CategoryFilterComboBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 140 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ComboBox PriceFilterComboBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 157 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.ComboBox CompanyFilterComboBox;
+        
+        #line default
+        #line hidden
+        
+        
+        #line 177 "..\..\..\MainWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.TextBox SearchFilterTextBox;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/wpf_app;V1.0.0.0;component/mainwindow.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\MainWindow.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.productsListBox = ((System.Windows.Controls.ListBox)(target));
+            
+            #line 41 "..\..\..\MainWindow.xaml"
+            this.productsListBox.MouseDoubleClick += new System.Windows.Input.MouseButtonEventHandler(this.productsListBox_MouseDoubleClick);
+            
+            #line default
+            #line hidden
+            return;
+            case 2:
+            this.ExitButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 106 "..\..\..\MainWindow.xaml"
+            this.ExitButton.Click += new System.Windows.RoutedEventHandler(this.ExitButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            case 3:
+            this.CategoryFilterComboBox = ((System.Windows.Controls.ComboBox)(target));
+            
+            #line 123 "..\..\..\MainWindow.xaml"
+            this.CategoryFilterComboBox.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.CategoryFilterComboBox_SelectionChanged);
+            
+            #line default
+            #line hidden
+            return;
+            case 4:
+            this.PriceFilterComboBox = ((System.Windows.Controls.ComboBox)(target));
+            
+            #line 141 "..\..\..\MainWindow.xaml"
+            this.PriceFilterComboBox.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.PriceFilterComboBox_SelectionChanged);
+            
+            #line default
+            #line hidden
+            return;
+            case 5:
+            this.CompanyFilterComboBox = ((System.Windows.Controls.ComboBox)(target));
+            
+            #line 158 "..\..\..\MainWindow.xaml"
+            this.CompanyFilterComboBox.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.CompanyFilterComboBox_SelectionChanged);
+            
+            #line default
+            #line hidden
+            return;
+            case 6:
+            this.SearchFilterTextBox = ((System.Windows.Controls.TextBox)(target));
+            
+            #line 178 "..\..\..\MainWindow.xaml"
+            this.SearchFilterTextBox.KeyUp += new System.Windows.Input.KeyEventHandler(this.SearchFilterTextBox_KeyUp);
+            
+            #line default
+            #line hidden
+            return;
+            case 7:
+            
+            #line 188 "..\..\..\MainWindow.xaml"
+            ((System.Windows.Controls.RadioButton)(target)).Checked += new System.Windows.RoutedEventHandler(this.RadioButton_Checked);
+            
+            #line default
+            #line hidden
+            return;
+            case 8:
+            
+            #line 194 "..\..\..\MainWindow.xaml"
+            ((System.Windows.Controls.RadioButton)(target)).Checked += new System.Windows.RoutedEventHandler(this.RadioButton_Checked);
+            
+            #line default
+            #line hidden
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

+ 76 - 0
obj/Debug/net8.0-windows/Model/Windows/DetailProduct.g.i.cs

@@ -0,0 +1,76 @@
+#pragma checksum "..\..\..\..\..\Model\Windows\DetailProduct.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "34CDC5F03952616654C54984AD0A47674AFD15DD"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using wpf_app.Model.Windows;
+
+
+namespace wpf_app.Model.Windows {
+    
+    
+    /// <summary>
+    /// DetailProduct
+    /// </summary>
+    public partial class DetailProduct : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/wpf_app;V1.0.0.0;component/model/windows/detailproduct.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\..\Model\Windows\DetailProduct.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            this._contentLoaded = true;
+        }
+    }
+}
+

TEMPAT SAMPAH
obj/Debug/net8.0-windows/Model/Windows/ProductDetailsWindow.baml


+ 96 - 0
obj/Debug/net8.0-windows/Model/Windows/ProductDetailsWindow.g.cs

@@ -0,0 +1,96 @@
+#pragma checksum "..\..\..\..\..\Model\Windows\ProductDetailsWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "00F336FBE5C44CA3CB45CDF97091CC8005D44314"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using wpf_app.Model.Windows;
+
+
+namespace wpf_app.Model.Windows {
+    
+    
+    /// <summary>
+    /// ProductDetailsWindow
+    /// </summary>
+    public partial class ProductDetailsWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 75 "..\..\..\..\..\Model\Windows\ProductDetailsWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button ExitButton;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/wpf_app;component/model/windows/productdetailswindow.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\..\Model\Windows\ProductDetailsWindow.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.ExitButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 84 "..\..\..\..\..\Model\Windows\ProductDetailsWindow.xaml"
+            this.ExitButton.Click += new System.Windows.RoutedEventHandler(this.ExitButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

+ 96 - 0
obj/Debug/net8.0-windows/Model/Windows/ProductDetailsWindow.g.i.cs

@@ -0,0 +1,96 @@
+#pragma checksum "..\..\..\..\..\Model\Windows\ProductDetailsWindow.xaml" "{ff1816ec-aa5e-4d10-87f7-6f4963833460}" "00F336FBE5C44CA3CB45CDF97091CC8005D44314"
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics;
+using System.Windows;
+using System.Windows.Automation;
+using System.Windows.Controls;
+using System.Windows.Controls.Primitives;
+using System.Windows.Controls.Ribbon;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Ink;
+using System.Windows.Input;
+using System.Windows.Markup;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Media.Effects;
+using System.Windows.Media.Imaging;
+using System.Windows.Media.Media3D;
+using System.Windows.Media.TextFormatting;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Shell;
+using wpf_app.Model.Windows;
+
+
+namespace wpf_app.Model.Windows {
+    
+    
+    /// <summary>
+    /// ProductDetailsWindow
+    /// </summary>
+    public partial class ProductDetailsWindow : System.Windows.Window, System.Windows.Markup.IComponentConnector {
+        
+        
+        #line 75 "..\..\..\..\..\Model\Windows\ProductDetailsWindow.xaml"
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1823:AvoidUnusedPrivateFields")]
+        internal System.Windows.Controls.Button ExitButton;
+        
+        #line default
+        #line hidden
+        
+        private bool _contentLoaded;
+        
+        /// <summary>
+        /// InitializeComponent
+        /// </summary>
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        public void InitializeComponent() {
+            if (_contentLoaded) {
+                return;
+            }
+            _contentLoaded = true;
+            System.Uri resourceLocater = new System.Uri("/wpf_app;V1.0.0.0;component/model/windows/productdetailswindow.xaml", System.UriKind.Relative);
+            
+            #line 1 "..\..\..\..\..\Model\Windows\ProductDetailsWindow.xaml"
+            System.Windows.Application.LoadComponent(this, resourceLocater);
+            
+            #line default
+            #line hidden
+        }
+        
+        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
+        [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "8.0.4.0")]
+        [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Design", "CA1033:InterfaceMethodsShouldBeCallableByChildTypes")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")]
+        [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
+        void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) {
+            switch (connectionId)
+            {
+            case 1:
+            this.ExitButton = ((System.Windows.Controls.Button)(target));
+            
+            #line 84 "..\..\..\..\..\Model\Windows\ProductDetailsWindow.xaml"
+            this.ExitButton.Click += new System.Windows.RoutedEventHandler(this.ExitButton_Click);
+            
+            #line default
+            #line hidden
+            return;
+            }
+            this._contentLoaded = true;
+        }
+    }
+}
+

TEMPAT SAMPAH
obj/Debug/net8.0-windows/apphost.exe


TEMPAT SAMPAH
obj/Debug/net8.0-windows/ref/wpf_app.dll


TEMPAT SAMPAH
obj/Debug/net8.0-windows/ref/wpf_data_csv.dll


TEMPAT SAMPAH
obj/Debug/net8.0-windows/ref/wpf_filtering.dll


TEMPAT SAMPAH
obj/Debug/net8.0-windows/ref/wpf_search_sort.dll


TEMPAT SAMPAH
obj/Debug/net8.0-windows/ref/wpf_template.dll


TEMPAT SAMPAH
obj/Debug/net8.0-windows/refint/wpf_app.dll


TEMPAT SAMPAH
obj/Debug/net8.0-windows/refint/wpf_data_csv.dll


TEMPAT SAMPAH
obj/Debug/net8.0-windows/refint/wpf_filtering.dll


TEMPAT SAMPAH
obj/Debug/net8.0-windows/refint/wpf_search_sort.dll


TEMPAT SAMPAH
obj/Debug/net8.0-windows/refint/wpf_template.dll


+ 25 - 0
obj/Debug/net8.0-windows/wpf_app.AssemblyInfo.cs

@@ -0,0 +1,25 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     Этот код создан программой.
+//     Исполняемая версия:4.0.30319.42000
+//
+//     Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
+//     повторной генерации кода.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("wpf_app")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
+[assembly: System.Reflection.AssemblyProductAttribute("wpf_app")]
+[assembly: System.Reflection.AssemblyTitleAttribute("wpf_app")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+[assembly: System.Runtime.Versioning.TargetPlatformAttribute("Windows7.0")]
+[assembly: System.Runtime.Versioning.SupportedOSPlatformAttribute("Windows7.0")]
+
+// Создано классом WriteCodeFragment MSBuild.
+

+ 1 - 0
obj/Debug/net8.0-windows/wpf_app.AssemblyInfoInputs.cache

@@ -0,0 +1 @@
+312e73076d6d3282b6568a4b72bf6afc027fd766d76246dc8724f49b58651120

Beberapa file tidak ditampilkan karena terlalu banyak file yang berubah dalam diff ini