diff --git a/src/DynamoCore/DynamoCore.csproj b/src/DynamoCore/DynamoCore.csproj
index 3afc082a9ab..30fe76b77ed 100644
--- a/src/DynamoCore/DynamoCore.csproj
+++ b/src/DynamoCore/DynamoCore.csproj
@@ -130,6 +130,7 @@
+
@@ -221,6 +222,7 @@
+
diff --git a/src/DynamoCoreWpf/Controls/StartPage.xaml.cs b/src/DynamoCoreWpf/Controls/StartPage.xaml.cs
index 4153aa62e0d..9ed317b147a 100644
--- a/src/DynamoCoreWpf/Controls/StartPage.xaml.cs
+++ b/src/DynamoCoreWpf/Controls/StartPage.xaml.cs
@@ -654,7 +654,21 @@ private void HandleRegularCommand(StartPageListItem item)
private void HandleFilePath(StartPageListItem item)
{
var path = item.ContextData;
- this.DynamoViewModel.OpenCommand.Execute(path);
+ // Listed templates: use the same open path as the template file-picker (ShowOpenTemplateDialog),
+ // i.e. open as a new graph from the file contents, not as the saved template path on disk.
+ object openArg = IsTemplateFilePath(path)
+ ? Tuple.Create(path, false, true)
+ : path;
+ if (this.DynamoViewModel.OpenCommand.CanExecute(openArg))
+ {
+ this.DynamoViewModel.OpenCommand.Execute(openArg);
+ }
+ }
+
+ private bool IsTemplateFilePath(string path)
+ {
+ return TemplateFiles.Any(template =>
+ string.Equals(template.ContextData, path, StringComparison.OrdinalIgnoreCase));
}
private void HandleExternalUrl(StartPageListItem item)
diff --git a/src/DynamoCoreWpf/DynamoCoreWpf.csproj b/src/DynamoCoreWpf/DynamoCoreWpf.csproj
index 92e4e238109..5b7eaf3af12 100644
--- a/src/DynamoCoreWpf/DynamoCoreWpf.csproj
+++ b/src/DynamoCoreWpf/DynamoCoreWpf.csproj
@@ -59,7 +59,7 @@
- 1.0.28
+ 1.0.30
DynamoHome
diff --git a/src/DynamoCoreWpf/ViewModels/Core/DynamoViewModel.cs b/src/DynamoCoreWpf/ViewModels/Core/DynamoViewModel.cs
index 2fbe44f1901..74739a6f347 100644
--- a/src/DynamoCoreWpf/ViewModels/Core/DynamoViewModel.cs
+++ b/src/DynamoCoreWpf/ViewModels/Core/DynamoViewModel.cs
@@ -2378,8 +2378,15 @@ internal void OpenOnboardingGuideFile()
private bool CanOpen(object parameters)
{
-
- var filePath = parameters as string;
+ string filePath = parameters as string;
+ if (filePath == null && parameters is Tuple packedTwo)
+ {
+ filePath = packedTwo.Item1;
+ }
+ else if (filePath == null && parameters is Tuple packedThree)
+ {
+ filePath = packedThree.Item1;
+ }
if (!PathHelper.IsValidPath(filePath))
{
diff --git a/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs b/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs
index 362c4b2507d..c9a02c05804 100644
--- a/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs
+++ b/src/DynamoCoreWpf/Views/HomePage/HomePage.xaml.cs
@@ -542,8 +542,20 @@ internal void OpenFile(string path)
return;
}
- if (this.startPage.DynamoViewModel.OpenCommand.CanExecute(path))
- this.startPage.DynamoViewModel.OpenCommand.Execute(path);
+ var dvm = this.startPage.DynamoViewModel;
+ var openArg = IsListedHomePageTemplate(path)
+ ? (object)Tuple.Create(path, false, true)
+ : path;
+ if (dvm.OpenCommand.CanExecute(openArg))
+ {
+ dvm.OpenCommand.Execute(openArg);
+ }
+ }
+
+ private bool IsListedHomePageTemplate(string path)
+ {
+ return startPage?.TemplateFiles?.Any(t =>
+ string.Equals(t.ContextData, path, StringComparison.OrdinalIgnoreCase)) == true;
}
internal void StartGuidedTour(string path)
diff --git a/test/DynamoCoreWpf3Tests/WorkspaceOpeningTests.cs b/test/DynamoCoreWpf3Tests/WorkspaceOpeningTests.cs
index f19a9f8bf42..494af8d6857 100644
--- a/test/DynamoCoreWpf3Tests/WorkspaceOpeningTests.cs
+++ b/test/DynamoCoreWpf3Tests/WorkspaceOpeningTests.cs
@@ -114,6 +114,15 @@ public void OpeningWorkspaceWithAutoRunState()
Assert.IsTrue(ws.HasRunWithoutCrash);
}
+ [Test]
+ public void CanOpenTemplateTupleWithValidPath()
+ {
+ var examplePath = Path.Combine(SampleDirectory, @"en-US\Basics\Basics_Basic01.dyn");
+ var openParams = Tuple.Create(examplePath, false, true);
+
+ Assert.IsTrue(ViewModel.OpenCommand.CanExecute(openParams));
+ }
+
[Test]
public void OpeningXMLWorkspaceShouldSetDeterministicId()
{