diff --git a/src/Files.App/Data/Items/DetailsLayoutColumnItem.cs b/src/Files.App/Data/Items/DetailsLayoutColumnItem.cs index 5fa0971b91a4..8592ad8a8004 100644 --- a/src/Files.App/Data/Items/DetailsLayoutColumnItem.cs +++ b/src/Files.App/Data/Items/DetailsLayoutColumnItem.cs @@ -145,5 +145,16 @@ public override int GetHashCode() return hashCode; } + + public void Update(DetailsLayoutColumnItem other) + { + UserLengthPixels = other.UserLengthPixels; + NormalMaxLength = other.NormalMaxLength; + UserCollapsed = other.UserCollapsed; + IsResizable = other.IsResizable; + IsHidden = other.IsHidden; + NormalMinLength = other.NormalMinLength; + UserLength = other.UserLength; + } } } diff --git a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs index 8e55e00ab56e..a41c7fbd53dd 100644 --- a/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs +++ b/src/Files.App/Views/Layouts/DetailsLayoutPage.xaml.cs @@ -146,22 +146,26 @@ protected override void OnNavigatedTo(NavigationEventArgs eventArgs) if (FolderSettings?.ColumnsViewModel is not null) { - ColumnsViewModel.DateCreatedColumn = FolderSettings.ColumnsViewModel.DateCreatedColumn; - ColumnsViewModel.DateDeletedColumn = FolderSettings.ColumnsViewModel.DateDeletedColumn; - ColumnsViewModel.DateModifiedColumn = FolderSettings.ColumnsViewModel.DateModifiedColumn; - ColumnsViewModel.IconColumn = FolderSettings.ColumnsViewModel.IconColumn; - ColumnsViewModel.ItemTypeColumn = FolderSettings.ColumnsViewModel.ItemTypeColumn; - ColumnsViewModel.NameColumn = FolderSettings.ColumnsViewModel.NameColumn; - ColumnsViewModel.PathColumn = FolderSettings.ColumnsViewModel.PathColumn; - ColumnsViewModel.OriginalPathColumn = FolderSettings.ColumnsViewModel.OriginalPathColumn; - ColumnsViewModel.SizeColumn = FolderSettings.ColumnsViewModel.SizeColumn; - ColumnsViewModel.StatusColumn = FolderSettings.ColumnsViewModel.StatusColumn; - ColumnsViewModel.TagColumn = FolderSettings.ColumnsViewModel.TagColumn; - ColumnsViewModel.GitStatusColumn = FolderSettings.ColumnsViewModel.GitStatusColumn; - ColumnsViewModel.GitLastCommitDateColumn = FolderSettings.ColumnsViewModel.GitLastCommitDateColumn; - ColumnsViewModel.GitLastCommitMessageColumn = FolderSettings.ColumnsViewModel.GitLastCommitMessageColumn; - ColumnsViewModel.GitCommitAuthorColumn = FolderSettings.ColumnsViewModel.GitCommitAuthorColumn; - ColumnsViewModel.GitLastCommitShaColumn = FolderSettings.ColumnsViewModel.GitLastCommitShaColumn; + // Don't assign the columns view model directly, instead update each property individually using the Update method. + // This is done to workaround a bug where CsWinRT doesn't properly track the memory of the object so that + // an invalid memory access can occur when the object is moved. + // See https://github.com/microsoft/CsWinRT/issues/1834. + ColumnsViewModel.DateCreatedColumn.Update(FolderSettings.ColumnsViewModel.DateCreatedColumn); + ColumnsViewModel.DateDeletedColumn.Update(FolderSettings.ColumnsViewModel.DateDeletedColumn); + ColumnsViewModel.DateModifiedColumn.Update(FolderSettings.ColumnsViewModel.DateModifiedColumn); + ColumnsViewModel.IconColumn.Update(FolderSettings.ColumnsViewModel.IconColumn); + ColumnsViewModel.ItemTypeColumn.Update(FolderSettings.ColumnsViewModel.ItemTypeColumn); + ColumnsViewModel.NameColumn.Update(FolderSettings.ColumnsViewModel.NameColumn); + ColumnsViewModel.PathColumn.Update(FolderSettings.ColumnsViewModel.PathColumn); + ColumnsViewModel.OriginalPathColumn.Update(FolderSettings.ColumnsViewModel.OriginalPathColumn); + ColumnsViewModel.SizeColumn.Update(FolderSettings.ColumnsViewModel.SizeColumn); + ColumnsViewModel.StatusColumn.Update(FolderSettings.ColumnsViewModel.StatusColumn); + ColumnsViewModel.TagColumn.Update(FolderSettings.ColumnsViewModel.TagColumn); + ColumnsViewModel.GitStatusColumn.Update(FolderSettings.ColumnsViewModel.GitStatusColumn); + ColumnsViewModel.GitLastCommitDateColumn.Update(FolderSettings.ColumnsViewModel.GitLastCommitDateColumn); + ColumnsViewModel.GitLastCommitMessageColumn.Update(FolderSettings.ColumnsViewModel.GitLastCommitMessageColumn); + ColumnsViewModel.GitCommitAuthorColumn.Update(FolderSettings.ColumnsViewModel.GitCommitAuthorColumn); + ColumnsViewModel.GitLastCommitShaColumn.Update(FolderSettings.ColumnsViewModel.GitLastCommitShaColumn); } ParentShellPageInstance.ShellViewModel.EnabledGitProperties = GetEnabledGitProperties(ColumnsViewModel);