Editing: krash


krash

process

Of course. It's clear that the migration from Xamarin to .NET MAUI has introduced some runtime issues due to the architectural differences between the two frameworks. I'll help you fix these crashes by making your code more robust and compliant with MAUI's stricter lifecycle and threading models.

Based on the information you provided, the crashes are happening in the search functionality. I'll start by locating the relevant code and then apply the necessary fixes.

First, I'll search for searchbarexpendituredetails within the CERS project to identify the file that needs to be updated. I'll then create a TODO list to track the necessary changes. I will then read the file to understand the context and then apply the fixes. I will focus on the CERS MAUI project. I will start by creating a todo list to outline my plan. Then I will search for the searchbarexpendituredetails in the CERS directory. After finding the file, I will read the file and then apply the fixes. Finally, I will update the todo list. I will start by creating a todo list. Then I will search for the searchbarexpendituredetails in the CERS directory. After finding the file, I will read the file and then apply the fixes. Finally, I will update the todo list. I will start by creating a todo list. Then I will search for the searchbarexpendituredetails in the CERS directory. After finding the file, I will read the file and then apply the fixes. Finally, I will update the todo list.

1 Identify the file containing the search functionality causing crashes.

Read the identified file to understand the code context.

Apply null checks for properties before calling methods like .ToLower().

Add validation to ensure UI controls are not null or disposed before use.

Implement checks for page disposal (this.Handler == null) to prevent events from firing on disposed pages.

Ensure data lists are not null before performing search/filter operations.

Wrap search logic in try-catch blocks for better exception handling.

Clean up event handlers to prevent memory leaks.

Great, I've found the relevant files. The search bar searchbar_expendituredetails is used in ObserverViewExpenditureDetailsPage.xaml.cs and ViewExpenditureDetailsPage.xaml.cs . I'll start with ObserverViewExpenditureDetailsPage.xaml.cs to fix the crashes.

I'll now read the contents of that file to understand the existing implementation. After that, I'll apply the necessary fixes to prevent the null reference and object disposed exceptions. I will then do the same for ViewExpenditureDetailsPage.xaml.cs .

* fix the MAUI version to match the working Xamarin layout:*

Removed style from Style.xaml but still referenced in pages

Example add those styles and colors if they're being referenced in your app. Let me check which ones are actually being used:

removed the LabelStyle_TabMenu style from Styles.xaml , but it's still being referenced in your pages (like DashboardPage.xaml line 215, 223, 231). You need to add it back:

Colors.xaml the keys were auto-corrected to lowercase (e.g., LightLbltextColor instead of LightLblTextColor). Let me fix the casing:

issue - the keys have incorrect casing (lowercase instead of uppercase).

You're right! The NavigationPage style already handles the navigation bar, but it only sets BarTextColor which applies to the default navigation title, not custom TitleView content.

Since you're using custom NavigationPage.TitleView with labels in it, those labels need their own style (which is why I created NavigationHeaderStyle).

However, if you want to simplify and have the NavigationPage style also work for labels inside TitleView, you can't do that directly. The NavigationPage.BarTextColor only affects the built-in title text, not custom XAML content.

Two approaches:

Keep NavigationHeaderStyle (current approach) - Explicit style for labels in custom TitleViews Use implicit Label style - Make all labels in TitleView white by default If you want option 2, I can modify the implicit Label style to check if it's in a navigation context. But the cleaner approach is what we have now - a dedicated NavigationHeaderStyle that you apply to navigation labels.

The NavigationPage style is working correctly - it sets the navigation bar background to Primary (DeepSkyBlue) and the bar text/icons to white. The NavigationHeaderStyle is needed specifically for the custom labels you're placing inside NavigationPage.TitleView.

Does this make sense, or would you like me to try a different approach?

root causes of the search crashes:

🔍 Root Causes of Search Crashes 1. Null Reference Exceptions csharp // ❌ CRASH: Direct .ToLower() on potentially null strings t.ExpenseID.ToLower().Contains(texttosearch) t.expDate.ToLower().Contains(texttosearch) t.payeeName.ToLower().Contains(texttosearch) Problem: If any property is null, calling .ToLower() throws NullReferenceException

  1. ObjectDisposedException During Navigation csharp // ❌ CRASH: No validation if page/controls are disposed listView_expendituredetails.ItemsSource = filteredList; Problem: When user navigates away quickly, page gets disposed but SearchBar events still fire

  2. Missing Control Validation csharp // ❌ CRASH: No checks if controls exist if (!string.IsNullOrEmpty(searchbarexpendituredetails.Text)) Problem: No validation that searchbarexpendituredetails or listView_expendituredetails are not null

  3. Thread Safety Issues Multiple rapid text changes create race conditions No protection against concurrent access to data lists UI updates happening on wrong threads

  4. Page Lifecycle Issues No checks for this.Handler == null (indicates disposed page) Events continue firing after page disposal No cleanup of event handlers
  5. Data List Null Checks Missing csharp // ❌ CRASH: No validation if data list exists observerExpenditureDetailsList.Where(t => ...) expenditureDetailslist.Where(t => ...) Problem: If data loading fails, lists could be null

  6. Exception Handling Gaps No try-catch blocks around search operations No graceful handling of disposal scenarios Crashes propagate to UI thread

The crashes occur because your current code assumes all objects and properties are always valid, but in MAUI's lifecycle, controls can be disposed or null during rapid navigation scenarios.

Feedback submitted

then why it worket in xamrain version no issue @CERS-xamarin

Excellent question! The same exact code works in Xamarin but crashes in MAUI due to fundamental differences in their architectures:

🔍 Why Xamarin Worked vs MAUI Crashes 1. Page Lifecycle Management Xamarin.Forms:

More forgiving page disposal Controls remain accessible longer during navigation Less aggressive garbage collection MAUI:

Stricter page lifecycle management Controls get disposed immediately during navigation Handler property becomes null faster 2. Threading Model Differences Xamarin.Forms:

UI events mostly stayed on UI thread Less strict about cross-thread operations More tolerant of timing issues MAUI:

Stricter threading enforcement Events can fire on background threads More sensitive to race conditions 3. Control Disposal Timing Xamarin.Forms:

csharp // ✅ Usually worked - controls stayed alive longer listView.ItemsSource = filteredData; MAUI:

csharp // ❌ Crashes - controls disposed faster listView.ItemsSource = filteredData; // ObjectDisposedException 4. Memory Management Xamarin.Forms:

Less aggressive memory cleanup Controls had longer lifespans Null reference exceptions were rarer MAUI:

More aggressive memory management Faster control disposal Higher chance of null references 5. Navigation Architecture Xamarin.Forms:

Page navigation was more synchronous Less overlap between disposal and events MAUI:

Asynchronous navigation patterns More overlap between page disposal and ongoing events 6. Handler vs Renderer Xamarin.Forms (Renderers):

Native controls wrapped differently More forgiving disposal patterns MAUI (Handlers):

Direct native control mapping Stricter lifecycle management Handler == null indicates disposal 📊 The Core Difference csharp // Xamarin.Forms - This rarely failed private void SearchBar_TextChanged(object sender, TextChangedEventArgs e) { listView.ItemsSource = data.Where(x => x.Name.ToLower().Contains(text)); }

// MAUI - Same code now crashes because: // 1. listView might be disposed (Handler == null) // 2. x.Name might be null (stricter null handling) // 3. Event fires after page disposal Bottom Line: MAUI's improved architecture and performance comes with stricter lifecycle management, requiring more defensive programming patterns that weren't necessary in Xamarin.Forms.

Your Xamarin code worked by "luck" - MAUI exposes the underlying timing and disposal issues that were always there but hidden.

Feedback submitt