diff --git a/Source/LibationAvalonia/Controls/DataGridTemplateColumnExt.axaml b/Source/LibationAvalonia/Controls/DataGridTemplateColumnExt.axaml
new file mode 100644
index 00000000..69d12455
--- /dev/null
+++ b/Source/LibationAvalonia/Controls/DataGridTemplateColumnExt.axaml
@@ -0,0 +1,7 @@
+
+
+
diff --git a/Source/LibationAvalonia/Controls/DataGridTemplateColumnExt.axaml.cs b/Source/LibationAvalonia/Controls/DataGridTemplateColumnExt.axaml.cs
new file mode 100644
index 00000000..f7cece5e
--- /dev/null
+++ b/Source/LibationAvalonia/Controls/DataGridTemplateColumnExt.axaml.cs
@@ -0,0 +1,73 @@
+using Avalonia.Collections;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+using LibationAvalonia.ViewModels;
+using System;
+using System.Reflection;
+
+namespace LibationAvalonia.Controls
+{
+ public class DataGridViewCellContextMenuStripNeededEventArgs
+ {
+ private static readonly MethodInfo GetCellValueMethod;
+ static DataGridViewCellContextMenuStripNeededEventArgs()
+ {
+ GetCellValueMethod = typeof(DataGridColumn).GetMethod("GetCellValue", BindingFlags.NonPublic | BindingFlags.Instance);
+ }
+
+ private static string GetCellValue(DataGridColumn column, object item)
+ => GetCellValueMethod.Invoke(column, new object[] { item, column.ClipboardContentBinding })?.ToString() ?? "";
+
+ public string CellClipboardContents => GetCellValue(Column, GridEntry);
+ public DataGridTemplateColumnExt Column { get; init; }
+ public GridEntry GridEntry { get; init; }
+ public ContextMenu ContextMenu { get; init; }
+ public AvaloniaList