
Hi,
When I switch between views in my app the grid not seen I see only label(See attached screenshhot).
I added sample code like in my app without data.
What can be the problem?
Thanks,,
1 Answer, 1 is accepted
Hi Daniel,
I've attached your test project, with the fixes to the problems I mentioned in my earlier comment. at runtime, things appear to be working as expected.
Here are some screenshots when I run the project.
1. At launch:
2. Clicking Button 1:
3. Clicking Button 2:
Further Investigation
However, as you mentioned there is no sample data, so I cannot test that side of things. Please take my demo, read my notes and comments and apply these changes to your app.
If you still have an issue, please update my demo again, but with the actual data model you use and sample data that faithfully represents the real data. Ultimately, I need to be able to give the developers a project that shows the problem at runtime.
Important Note About UI Virtualization
I see you have other implementations in other forum threads where your code has a RadListView or a DataGrid inside a VerticalStackLayout. The same problem can affect you there.
My advice is to never use a StackLayout unless you are explicitly intending to "squish" the children to the bare minimum space and not allow forced measurement recalculation by the child. Always use a Grid or other layout parent that allows the child to expand into available space.
Regards,
Lance | Manager Technical Support
Progress Telerik
Virtual Classroom, the free self-paced technical training that gets you up to speed with Telerik and Kendo UI products quickly just got a fresh new look + new and improved content including a brand new Blazor course! Check it out at https://learn.telerik.com/.
I attached demo that replicated the issue,
Press on button 1 coupled of times =? data are blank=> do not maximize the window.
Hi Daniel,
Thank you for the updated project. I was able to see the issue at runtime. I have further simplified the project to the bare minimum needed to reproduce the problem and created a bug report => DataGrid Won't Render 2nd Instance (telerik.com)
Unfortunately, I do not have a workaround for you. I attempted to invalidate the layout with InvalidateLayout, which forces a UI element to redraw itself, but even that didn't work.
My only suggestion would be to use normal navigation instead of trying to invent your own with Grid.Children(). this way you can use normal ContentPage objects and rely on the well structured Shell navigation methods. See .NET MAUI Shell navigation - .NET MAUI | Microsoft Docs.
If I did the work for you on this one project, you still wouldn't understand how Shell works. You can see how to use Shell here Create a .NET MAUI Shell app - .NET MAUI | Microsoft Docs.(continue through all the tutorials)
In your ShellPage is where you'll have the different content pages, like DashboardPage and HistoryPage. The shell mechanism will create the tabs or flyout page for you.
I have a little bit of good news. I just looked through the developer's work items and found that they are already aware of the problem. The bad news is there is not currently a date where it expected to be fixed. However, it does have a higher priority that most items.
You will know when we have a released a fix for it when the official bug report gets changed to Fixed. https://feedback.telerik.com/maui/1565483-datagrid-won-t-render-2nd-instance
We are currently aware of problems with the following items on WinUI
- - Rendering TemplateColumn cell content (will not appear until resize/hover)
- - Rendering of any CellEditTemplate
- - Rendering of any CellContentTemplate
If your experience has those, there's no need for a new bug report, they're covered by the same fundamental rendering issue in the existing bug report.
I would like to ask you.
I have login and from there I want to move to appshell.
public partial class App : Application { public App() { InitializeComponent(); MainPage = new LoginPage();//new AppShell(); } }
That is a question better asked in the Microsoft forums because they're the one who built Shell, but I can give you my thoughts....
AppShell is not a "page" that you navigate to, it is the entire root of the application that handles the side drawer and page navigation for you. In your shell page's XAML, you could have the LoginPage, MainPage and DetailsPage, etc.
When the app loads, you can navigate to LoginPage first if the user needs to login, but if the user already has an authentication token stored, you can instead navigate to the MainPage.
Here's a pseudo example:
public partial class App : Application
{
public App()
{
InitializeComponent();
// Only use AppShell as the root of the application
MainPage = new AppShell();
}
}
<Shell xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:views="clr-namespace:MyApp.Views"
x:Class="MyApp.AppShell">
<FlyoutItem FlyoutDisplayOptions="AsMultipleItems">
<ShellContent Title="Login"
Icon="login.png"
ContentTemplate="{DataTemplate views:LoginPage}" />
<ShellContent Title="Home"
Icon="home.png"
ContentTemplate="{DataTemplate views:HomePage}" />
<ShellContent Title="Details"
Icon="details.png"
ContentTemplate="{DataTemplate views:DetailsPage}" />
</FlyoutItem>
</Shell>
if(UserIsLoggedIn)
{
await Shell.Current.GoToAsync("/main");
}
else
{
await Shell.Current.GoToAsync("/login");
}
Further Help With Shell
I urge you to take a closer look at all the many resources for Shell online. You can also use the Xamarin.Forms shell examples because the code is the same for MAUI.
The Shell Navigation documentation's tutorial will show you how to layout your pages and how to navigate between them => .NET MAUI Shell navigation - .NET MAUI | Microsoft Docs
To ask specific questions about Shell, you can use the Xamarin.Forms forums (Microsoft hasn't setup forums for MAUI yet) => dotnet-xamarinforms - Microsoft Q&A.
I'm looking on videoes.
Where you put this code I want login will be alone.
if(UserIsLoggedIn) { await Shell.Current.GoToAsync("/main"); } else { await Shell.Current.GoToAsync("/login"); }
That depends on your app's lifecycle. I can't tell you where to use your custom business logic or how to store the user token and when to check it after the app loads. You'd probably want to do it in the AppShell when it loads (because that's when you need to make a decision on what page to navigate to).
Please follow the entire tutorial on how to use Shell. Do not just read it and try to plug in the code into your existing app at the same time because you'll be dividing your attention. If you follow the tutorial until completion, then you can go ahead and try it in your real app because you'll have already understood the fundamentals.
I have great news! Microsoft just released it's first new course on .NET MAUI Build mobile and desktop apps with .NET MAUI - Learn | Microsoft Docs.
That is actually a full Learning Path that covers a wide range in topics and is a full 5 hours and 45 minutes! You can go from module to module to learn all the different aspects of .NET MAUI.
There you can learn all the different topics you've been looking for help with. This is a good sign that the MAUI documentation is getting ready for the first release of .NET MAUI.
Quick Update. I have spent all day working on trying to workaround this using a ContentPage to ContentPage navigation scenario, but was ultimately unsuccessful.
I can only say that we will need to wait for the UI for MAUI developers to identify the cause. You will receive a notification from the MAUI team in the open Bug Report, there's nothing more we can discuss in this thread.
Here's some screenshots, that DataGrid will have trouble rendering when you come back from the details page.
Routes Page (DataGrid works on the first load)
Route Details Page
When you come back from the details page, you need to re-size the app window before the DataGrid will re-appear again. this is the same problem you're seeing when you instantiate new ContentViews.
More info: When loading first time I see data in one view, later I navigate to other view I see only label.
When I maximized the window I see the data.
I see the code is still using a VerticalStackLayout and StackLayout. Although I see you're using an explicit HeightRequest to prevent the effects of the StackLayout, I'm still suspicious of it because the symptoms you're explaining are what happens when the measure & arrange pass is not working due to size contraints
Please switch to a Grid and put UI virtualized controls like the DataGrid and RadListView only inside star-sized RowDefintions.
Here's what that would look like in the HistoryPage
Understanding DataGridBorderStyle is not a Style object
Finally, I see that you're sharing the same instance of DataGridBorderStyle with every column. DataGridBorderStyle is not a Style... it is an object instance of type DataGridBorderStyle.
Why does this matter? In XAML, a Style is essentially a "definition" of what values to use in the target object, it is not an instance of that end object. Whereas a DataGridBorderStyle is an instance of a DataGridBorderStyle object and is not a template that can be reused.
So, please change your DataGrid so that every column has it's own, separate instance, of the DataGridBorderStyle object.
Here's a screenshot of what the updated code should look like, each column has its own instance of the item:
Or, if you prefer not to use StaticResources, you can nest it inside the columns