diff --git a/PacticeSolution/ControlTemplateSample/MainWindow.xaml b/PacticeSolution/ControlTemplateSample/MainWindow.xaml
index 50fd9ec..4c63ede 100644
--- a/PacticeSolution/ControlTemplateSample/MainWindow.xaml
+++ b/PacticeSolution/ControlTemplateSample/MainWindow.xaml
@@ -7,7 +7,12 @@
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
-
diff --git a/PacticeSolution/DelegateEventFuncAction/DelegateEventFuncAction.csproj b/PacticeSolution/DelegateEventFuncAction/DelegateEventFuncAction.csproj
new file mode 100644
index 0000000..74abf5c
--- /dev/null
+++ b/PacticeSolution/DelegateEventFuncAction/DelegateEventFuncAction.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/PacticeSolution/DelegateEventFuncAction/DelegateTest.cs b/PacticeSolution/DelegateEventFuncAction/DelegateTest.cs
new file mode 100644
index 0000000..478d445
--- /dev/null
+++ b/PacticeSolution/DelegateEventFuncAction/DelegateTest.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DelegateEventFuncAction
+{
+ public class DelegateTest
+ {
+ public delegate void FunctionPointer();
+
+ private static void Print1()
+ {
+ Console.WriteLine("Print 1");
+ }
+
+ private static void Print2()
+ {
+ Console.WriteLine("Print 2");
+ }
+
+ private static void Print3()
+ {
+ Console.WriteLine("Print 3");
+ }
+
+ private static void Print4()
+ {
+ Console.WriteLine("Print 4");
+ }
+
+ private static void Execute(FunctionPointer fp)
+ {
+ fp();
+ }
+
+ public static void DoTest1()
+ {
+ Execute(Print1);
+ Execute(Print2);
+ Execute(Print3);
+ Execute(Print4);
+ }
+
+ public static void DoTest2()
+ {
+ // delegate chain
+ FunctionPointer fp = new FunctionPointer(Print1);
+ fp += Print2;
+ fp += Print3;
+ fp += Print4;
+
+ fp();
+ }
+ }
+}
diff --git a/PacticeSolution/DelegateEventFuncAction/EventTest.cs b/PacticeSolution/DelegateEventFuncAction/EventTest.cs
new file mode 100644
index 0000000..a3571bc
--- /dev/null
+++ b/PacticeSolution/DelegateEventFuncAction/EventTest.cs
@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DelegateEventFuncAction
+{
+ public class EventTest
+ {
+ public delegate void CustomEventHandler(string message);
+
+ public event CustomEventHandler Trigger;
+
+ public event Action TriggerByAction;
+
+ public void Notify()
+ {
+ Random rnd = new Random();
+ int r = rnd.Next(0, 10);
+
+ if (r <= 7 && this.Trigger != null)
+ this.Trigger("70% probability");
+
+ if (r <= 5 && this.TriggerByAction != null)
+ this.TriggerByAction("50% probability");
+ }
+ }
+}
diff --git a/PacticeSolution/DelegateEventFuncAction/Program.cs b/PacticeSolution/DelegateEventFuncAction/Program.cs
new file mode 100644
index 0000000..6311851
--- /dev/null
+++ b/PacticeSolution/DelegateEventFuncAction/Program.cs
@@ -0,0 +1,26 @@
+namespace DelegateEventFuncAction
+{
+ internal class Program
+ {
+ static void Main(string[] args)
+ {
+ //DelegateTest.DoTest1();
+ //DelegateTest.DoTest2();
+
+ EventTest et = new EventTest();
+ et.Trigger += (message) =>
+ {
+ Console.WriteLine($"[Delegate] {message}");
+ };
+ et.TriggerByAction += (message) =>
+ {
+ Console.WriteLine($"[Action] {message}");
+ };
+ et.Notify();
+ et.Notify();
+ et.Notify();
+ et.Notify();
+ et.Notify();
+ }
+ }
+}
\ No newline at end of file
diff --git a/PacticeSolution/ListViewEditSample/App.xaml b/PacticeSolution/ListViewEditSample/App.xaml
new file mode 100644
index 0000000..a0947a2
--- /dev/null
+++ b/PacticeSolution/ListViewEditSample/App.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
diff --git a/PacticeSolution/ListViewEditSample/App.xaml.cs b/PacticeSolution/ListViewEditSample/App.xaml.cs
new file mode 100644
index 0000000..ac099a6
--- /dev/null
+++ b/PacticeSolution/ListViewEditSample/App.xaml.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace ListViewEditSample
+{
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+ }
+}
diff --git a/PacticeSolution/ListViewEditSample/AssemblyInfo.cs b/PacticeSolution/ListViewEditSample/AssemblyInfo.cs
new file mode 100644
index 0000000..8b5504e
--- /dev/null
+++ b/PacticeSolution/ListViewEditSample/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)
+)]
diff --git a/PacticeSolution/ListViewEditSample/CompanyInfo.cs b/PacticeSolution/ListViewEditSample/CompanyInfo.cs
new file mode 100644
index 0000000..6f63414
--- /dev/null
+++ b/PacticeSolution/ListViewEditSample/CompanyInfo.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ListViewEditSample
+{
+ public class CompanyInfo
+ {
+ public string Name { get; set; }
+ public DateTime Date { get; set; }
+ }
+}
diff --git a/PacticeSolution/ListViewEditSample/CompanyList.cs b/PacticeSolution/ListViewEditSample/CompanyList.cs
new file mode 100644
index 0000000..914ccba
--- /dev/null
+++ b/PacticeSolution/ListViewEditSample/CompanyList.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ListViewEditSample
+{
+ internal class CompanyList : List
+ {
+ public CompanyList()
+ {
+ InitInstance();
+ }
+
+ private void InitInstance()
+ {
+ this.Add(new CompanyInfo() { Name = "Google", Date = DateTime.Now });
+ this.Add(new CompanyInfo() { Name = "Hoogle", Date = DateTime.Now });
+ this.Add(new CompanyInfo() { Name = "Ioogle", Date = DateTime.Now });
+ this.Add(new CompanyInfo() { Name = "Joogle", Date = DateTime.Now });
+ }
+ }
+}
diff --git a/PacticeSolution/ListViewEditSample/DateConverter.cs b/PacticeSolution/ListViewEditSample/DateConverter.cs
new file mode 100644
index 0000000..2263152
--- /dev/null
+++ b/PacticeSolution/ListViewEditSample/DateConverter.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Data;
+
+namespace ListViewEditSample
+{
+ internal class DateConverter : IValueConverter
+ {
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (!(value is DateTime))
+ return "";
+
+ DateTime date = (DateTime)value;
+
+ return date.ToString("yyyy년 MM월 dd일 HH시 mm분 ss초 fff밀리세컨드");
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/PacticeSolution/ListViewEditSample/ListViewEditSample.csproj b/PacticeSolution/ListViewEditSample/ListViewEditSample.csproj
new file mode 100644
index 0000000..4106cb0
--- /dev/null
+++ b/PacticeSolution/ListViewEditSample/ListViewEditSample.csproj
@@ -0,0 +1,10 @@
+
+
+
+ WinExe
+ net6.0-windows
+ enable
+ true
+
+
+
diff --git a/PacticeSolution/ListViewEditSample/MainWindow.xaml b/PacticeSolution/ListViewEditSample/MainWindow.xaml
new file mode 100644
index 0000000..8cb4f50
--- /dev/null
+++ b/PacticeSolution/ListViewEditSample/MainWindow.xaml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PacticeSolution/ListViewEditSample/MainWindow.xaml.cs b/PacticeSolution/ListViewEditSample/MainWindow.xaml.cs
new file mode 100644
index 0000000..d721e49
--- /dev/null
+++ b/PacticeSolution/ListViewEditSample/MainWindow.xaml.cs
@@ -0,0 +1,28 @@
+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.Navigation;
+using System.Windows.Shapes;
+
+namespace ListViewEditSample
+{
+ ///
+ /// Interaction logic for MainWindow.xaml
+ ///
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/PacticeSolution/PacticeSolution.sln b/PacticeSolution/PacticeSolution.sln
index e902447..2079efa 100644
--- a/PacticeSolution/PacticeSolution.sln
+++ b/PacticeSolution/PacticeSolution.sln
@@ -103,9 +103,13 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AnonymousMethod", "Anonymou
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TabContorlLightSample", "TabContorlLightSample\TabContorlLightSample.csproj", "{BB27AD88-D070-4095-BB8B-E2049F7DB0EC}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StaticResourceSample", "StaticResourceSample\StaticResourceSample.csproj", "{6206E9C9-4449-42CC-A0A5-E54C4B15AA53}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StaticResourceSample", "StaticResourceSample\StaticResourceSample.csproj", "{6206E9C9-4449-42CC-A0A5-E54C4B15AA53}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HowToUseStyle", "HowToUseStyle\HowToUseStyle.csproj", "{6E182894-D2F1-4D2C-B991-51B01A2E3223}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HowToUseStyle", "HowToUseStyle\HowToUseStyle.csproj", "{6E182894-D2F1-4D2C-B991-51B01A2E3223}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ListViewEditSample", "ListViewEditSample\ListViewEditSample.csproj", "{87E66D9A-4E6C-43E8-B23A-AB2A2E9F67D5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DelegateEventFuncAction", "DelegateEventFuncAction\DelegateEventFuncAction.csproj", "{52E7C139-F78C-4947-BB09-58D4BFF72435}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -321,6 +325,14 @@ Global
{6E182894-D2F1-4D2C-B991-51B01A2E3223}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E182894-D2F1-4D2C-B991-51B01A2E3223}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E182894-D2F1-4D2C-B991-51B01A2E3223}.Release|Any CPU.Build.0 = Release|Any CPU
+ {87E66D9A-4E6C-43E8-B23A-AB2A2E9F67D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {87E66D9A-4E6C-43E8-B23A-AB2A2E9F67D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {87E66D9A-4E6C-43E8-B23A-AB2A2E9F67D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {87E66D9A-4E6C-43E8-B23A-AB2A2E9F67D5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {52E7C139-F78C-4947-BB09-58D4BFF72435}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {52E7C139-F78C-4947-BB09-58D4BFF72435}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {52E7C139-F78C-4947-BB09-58D4BFF72435}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {52E7C139-F78C-4947-BB09-58D4BFF72435}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE