A guy on Upwork made an app for me using this design pattern. I have to make updates and trying to figure out how it works. With events, at least you know where to look to see what a button does. This design pattern seems cool, but good luck trying to figure out how anything works if someone else made it
@jeremiedupont869610 сағат бұрын
Really awesome tutorial! Thank you! I had to make a dynamic screen with controls based on the datatype of the parameters... Your technique worked like a charm. Thank you!
@avalanczyКүн бұрын
Getting a "can't put a window in a style" error on the <view: View/> lines in the mainwindow.xaml ?
@andrerippstein47022 күн бұрын
The method you showed in the video seems not to work on Android using .NET Core 8.0. When I initialize Serilog as you showed, no log file is created and nothing is logged. using Microsoft.Extensions.Logging; using Serilog; namespace MauiApp2 { public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); // This seems not to work on Android using .NET Core 8.0 builder.Services.AddSerilog(new LoggerConfiguration() .MinimumLevel.Verbose() .Enrich.FromLogContext() .WriteTo.Debug() .WriteTo.File(path: Path.Combine(FileSystem.Current.AppDataDirectory, "logs", "AppLog-.log"), rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, retainedFileCountLimit: 31) .CreateLogger()); return builder.Build(); } } } However, the following initialization works on Android using .NET Core 8.0: using Microsoft.Extensions.Logging; using Serilog; namespace MauiApp2 { public static class MauiProgram { public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); // This works on Android using .NET Core 8.0 Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() .Enrich.FromLogContext() .WriteTo.Debug() .WriteTo.File(path: Path.Combine(FileSystem.Current.AppDataDirectory, "logs", "AppLog-.log"), rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true, retainedFileCountLimit: 31) .CreateLogger(); builder.Services.AddSerilog(Log.Logger); return builder.Build(); } } }
@nathannathan2637 күн бұрын
great tutorial but the naming scheme gives me headache
@MegaKenniK7 күн бұрын
one word, awesome.
@nasermustafi98288 күн бұрын
you could just not talk about steps you take, instead of skipping them. Sorry to say but even if you watch yourself your own video, you'll find it frustrating.
@John-b7b2q8 күн бұрын
I just have a suggestion to set "Follow Active Document in Solution Explorer" config setting to true so when you change tabs we can see where the file is located in the solution. It might be helpful for some viewers like myself. Great video.
@geekomania647110 күн бұрын
Comme de nombreux commentaires l'ont dit,chatgpt utilise uniquement le dataset fournit par OpenAI,qui ne peut être amélioré que par ses équipes.Ce qui est retenu dans les conversations ce n'est que la forme et pas le contenu,OpenAI suit des clauses de confidentialité pour assurer celle de ses utilisateurs.
@buraktoglu10 күн бұрын
nice work bud, keep it goin' kıps
@jannickbreunis10 күн бұрын
Alot of videos explain the factory for deciding which type of object to instantiate. This one also shows how to handle dependencies. This is a must use when using a DI container, making it very easy to add a service to the factory (injected with DI container) which will be communicated to the service. Hope that makes sense... Thanks for the video.
@TuberTugger20 күн бұрын
Get ready for everyone's pc to flag your app as a virus
@BrensNina21 күн бұрын
4:43 If you don't put some parameter or logic for the creation of the instance the lambda expression is innecesary I think (newbie here :p) services.AddTransient<PeopleListingViewModel>(s => new PeopleListingViewModel());
@AzenisBm21 күн бұрын
Thanks for the great tutorial
@peterbutler525621 күн бұрын
is there a way to download your code?
@OneMassiveMan22 күн бұрын
Use react native with expo. Maui is terrible with memory leaks everwhere with complex layouts, your apps will just crash without reasons. Memory leaks embedded within MAUI, MS doesn't even use MAUI on their OWN FLAGSHIP products as they are not possible in .net MAUI. MS will cancel and abandon it. Migrate all apps to react native with expo as that is the future. Better tooling, easier to use, no memory leaks, can customize everything, way faster.
@mikehankey866622 күн бұрын
Your series of videos is very good, thanks for the effort!
@MichaelBrownPlus24 күн бұрын
Not anymore. .Net 9 MAUI updates have been very stable and even better .Net ASPIRE as my backend helper framework in Azure has made my experience much better. I can build all my APIs, using Google Firebase for Auth (front end and backend to Azure), using SyncFusion UI, I’ve been able to build amazing apps. Even one I’m now about to publish using PLAID. I’ve been able to still continue (as I have with Xamarin) building both Android and iOS apps pretty damn easy and bug free. With very scalable Azure app services, SQL server, message queuing, storage, and security through managed identities and OAuth. I think if you really know the framework you’re fine. Easy to work through the quirks.
@josersleal26 күн бұрын
simple: MS user RN
@5ROC27 күн бұрын
Excellent !
@zajac481729 күн бұрын
This is pure GOLD!
@mikehankey8666Ай бұрын
Very helpful series, great job!
@ConfidentiaXАй бұрын
@SingletonSean What differences would I run into if I used, for example, Supabase instead of Firebase? Are there any large differences between them?
@miguelvega7168Ай бұрын
Awesome video!
@ManicmanyАй бұрын
---------------_-_-_-_-_---------- What is in program.cs show that page
@seiyonlee3044Ай бұрын
How you doing man? last video seems quite outdated. any good, it would be great if I get your new video!
@RamasamyN-o5pАй бұрын
I am currently building a .NET MAUI Hybrid app. It's amazing.
@JohnGrove310Ай бұрын
Thanks, good stuff
@ДмитроГоголенкоАй бұрын
I deleted StartUpUri and now styles are not applied. How to fix this?
@racha8683Ай бұрын
Well explained to someone who is good at c#, but for someone who is learning, this is just too fast, I know you are good at your work, but you aren't proving me how fast you can do it, you are literally teaching me something.
@denes.trambola2 күн бұрын
if you are learning MVVM when you're not good at C# rn, then sorry, but you are in the wrong place, my friend. First, understand C# to at least an intermediate level, then start to study the simple WPF concepts, elements, interfaces, classes, small project implementations, etc., and after that, you can start to think about the architecture patterns like MVVM (and maybe after MVVM, you can start to learn the larger architecture patterns like Domain Driven Design which is a very big game changer in C# projects, especially in big companies where they like the structured and well-designed projects). I hope I could help you!
@prakash2187Ай бұрын
I am impressed by the way you think and just code it , how can i become pro like you ? :)
@marvinaloneАй бұрын
why do you re-create the view models again and again?
@milicaiv8879Ай бұрын
Hi Sean, I watched your videos on using Strawberry Shake with GraphQL and found it really helpful! I have a quick question: How can I access response headers with Strawberry Shake? Is there a specific configuration or approach to intercept them? I’d really appreciate any guidance :)
@jwalsoni5458Ай бұрын
Man, you are going too fast
@klubkoftaАй бұрын
Perfect, thank you!
@gregorymoore2877Ай бұрын
Nice video! Would you like an easy way to find your actual database after the app creates it? I print the complete file path to the console. From there, I copy/paste the path into my file browser. I recommend using a Sqlite editor such as Navicat For Sqlite or JetBrains DataGrip to open and examine your database so you can verify that the app is doing what is expected.
@PrashantKumarSharmaАй бұрын
Making my notes in the comment section: ViewModals used: 1. KZbinViewersDetailsViewModel : The right pane 2. KZbinViewersListingViewModel : The whole list in the left pane 3. KZbinViewersListingItemViewModel : It is each tab in list (left pane) consisting of username and commands under 3 dots 4. KZbinViewersViewModel : where above 3 VMs are instantiated
@PrashantKumarSharmaАй бұрын
1. KZbinViewer : RO(Modal) Class with 3 fields - 1) username 2) bool value 3 ) bool value 2. KZbinViewStore : Cache of selected item in list which is updated every time item is selected via viewModel class interactions
@PrashantKumarSharmaАй бұрын
Flow : KZbinViewersViewModel will have the RO/ Modal object with which it updates the Selected Store and it is used to display to other places
@PrashantKumarSharma25 күн бұрын
ViewModels for Modal : 3 added KZbinViewersDetailsFormViewModel : It takes care of the right pane which has a form like structure. The Properties are : 1. UserName 2. IsSubscribed 3. Submit Command 4. Cancel Command The above ViewModel is used in AddKZbinViewersViewMode and EditKZbinViewersViewModel Navigation Store: ModalNavigation store has CurrentViewModel(inheriting from ViewModelBase) which holds the current viewmodel on display
@PrashantKumarSharma25 күн бұрын
Navigation: In order to open AddKZbinViewers and EditKZbinViewers dialog boxes we have created another store "ModalNavigationStore" and it will store which among the above two it will hold in the CurrentViewModel variable ( of ViewModelBase class) We will create a MainViewModel class which will hold the ModelNavigationStore variable and KZbinViewersViewModel variable. After this you can set ModelNavigationStore variable to either Add or Edit window in order to set the currentViewModel window on top of the Viewers list
@PrashantKumarSharma19 күн бұрын
Basic Commands : ADD button command is added in the KZbinViewersViewModel where all the 3 MVVs are instantiated A command folder is added and we will crat class command files - Every command is implemented with CommandBase class - CommandBase is implemented with ICommand - AddCommand has modalNavigationStore object passed holding the current viewmodel as it opens a Adding Dialog box - CloseCommand - even though we pass modal navigation store, we make CurrentViewModel as .Close()/null to close the dialog box - EditCommand
@claudio1983Ай бұрын
I'm just starting to discover MAUI. So I'm not an expert, but it seemes good to me. Not so bugged as portraied. Generally if you follow the guide lines it works well... bugs are everywhere on any framework. What I think is good of MAUI is the intention to be wide spread usable. I think MAUI is just at the beginning, like the .NET framework itself initially wasn't so good, and then it spread everywhere. And xaml is a very good feature since you can take almost any previous application and keep the UI (like from WPF for example). The fact is that the platform zoo is so vast and various, so give them some time. I'm confident it will be good.
@Taril69Ай бұрын
Man i didnt work for me..I did every step. I dont get any value into the variabel(key). creaed json file -> created AddAppsettings method -> downloaded 2x nugets (Bind & Json) -> changed propertie of json file. builder.AddAppSettings(); string key = builder.Configuration.GetValue<string>("ID_KEY"); private static void AddAppSettings(this MauiAppBuilder builder) { using Stream stream = Assembly .GetExecutingAssembly() .GetManifestResourceStream("VerifyIdentityProject.appsettings.json"); if(stream != null) { IConfigurationRoot config = new ConfigurationBuilder() .AddJsonStream(stream) .Build(); builder.Configuration.AddConfiguration(config); } }
@tonyelchino1Ай бұрын
Code snippets that are already part of visual studio only require one tab button press, however the custom snippets require two. Is there anyone way to change that behavior and only require that my custom snippet needs one tab button press?
@jacoby6000Ай бұрын
Not sure if you still watch these comments, but I hope you do :D I'm very confused about what benefit this provides. It seems like you're adding a lot of boilerplate to solve something that was never a problem. I see IoC containers and ServiceProvider patterns being considered best-practices in several domains, but every time I've ever wrestled with a system that uses them it just feels like an exercise in frustration. When things are not done perfectly, you get opaque errors. When things are done right, you have a bunch of indirect references to global shared state which makes the tracking down problems more difficult. I've heard people say they help with testing, but I've never seen a convincing argument for it. How is this better than just using normal constructors and passing around references?
@axeburningfire2507Ай бұрын
Singleton Sean, my man. I will appear to you in your moment of greatest peril to repay this debt.
@axeburningfire25072 ай бұрын
Thank you Sean, very based.
@MarcusDambacher2 ай бұрын
Hi Sean, I have devoured all your playlists on WPF. I'm a regular subscriber and find your videos really great. I have learned a lot about the MVVM model and your instructions are very practical. With the ParameterNavigationService feature, however, I fail at the implementation via DependencyInjection. You only implemented this in another installment of this series, but unfortunately no longer have an example in your application on GitHub. You have created an example for iancarr3923 that shows the normal implementation, but I always fail to pass the parameter via DependencyInjection. Since I would like to use the feature in a current project, I would be very grateful for a tip. Otherwise I can only encourage you: Keep up the good work.
@LeahTaylor-s8e2 ай бұрын
Great videos, but man you go fast. I usually watch videos at 1.25 or 1.5x, but you're the first person who seems too fast for me even at normal speed! Great content though, very helpful.
@katkatkatomg2 ай бұрын
great video & tutorial!! small note for 2024: the [Service] attribute isn't necessary and in fact will break the batch loading functionality 😊
@oneheykal10 күн бұрын
Thank you!
@drancerd2 ай бұрын
Now... a year after... there is hope? Blazor (Even MS use it) Aspire (Literaly You work for MS without contract) Core (Same as Aspire) MAUI: - It has no maps support - Binding libraries doesn't work - Lack of Doc and Benchmarks - No good examples and code snipets & tutorials - No Dev friendly at all The 'stuff' with MAUI, it's that customers want interconnected apps (desktop, web, Mobile & Excel obviously)
@glu_max2 ай бұрын
Your videos are great, I've learned a lot about WPF. May I ask why did you make a field public (3:46)? I heard it's a bad practice. Thanks!
@JohnGrove310Ай бұрын
Probably just as an example. Just make it a property.
2 ай бұрын
Views are garbage collected but viewmodels must be explicitly disposed. Set all fields and events to null (especially PropertyChanged) because hidden view objects that retain mystery bindings will be your biggest source of memory leaks. And viewmodels will be hard to manage unless you give them a parent-child relationship just like the visual and logical trees. Destructors don't come into play with viewmodels because viewmodels should only be used and disposed on the Dispatcher they were created from.
@rshelfo12 ай бұрын
Love the series, at 10:13 how did you inspect the actual network connection made between refit and the api? Where did you get the header information from?