public IDialogResult ShowWindow(string name) { IDialogResult dialogResult = new DialogResult(ButtonResult.None); var content = _containerExtension.Resolve <object>(name); if (!(content is Window dialogContent)) { throw new NullReferenceException("A dialog's content must be a Window"); } if (dialogContent is Window view && view.DataContext is null && ViewModelLocator.GetAutoWireViewModel(view) is null) { ViewModelLocator.SetAutoWireViewModel(view, true); } if (!(dialogContent.DataContext is IDialogAware viewModel)) { throw new NullReferenceException("A dialog's ViewModel must implement the IDialogAware interface"); } if (dialogContent is IDialogWindow dialogWindow) { ConfigureDialogWindowEvents(dialogWindow, result => { dialogResult = result; }); } MvvmHelpers.ViewAndViewModelAction <IDialogAware>(viewModel, d => d.OnDialogOpened(null)); dialogContent.ShowDialog(); return(dialogResult); }
internal static void AutowireViewModel(object viewOrViewModel) { if (viewOrViewModel is FrameworkElement view && ViewModelLocator.GetAutoWireViewModel(view) is null) { ViewModelLocator.SetAutoWireViewModel(view, true); } }
public void WhenOnAutoWireViewModelChangedThenViewBindingContextIsViewModel() { InitializeAViewModelIoC(); var view = new AView(); var autoWireViewModel = ViewModelLocator.GetAutoWireViewModel(view); Check.That(autoWireViewModel).IsFalse(); ViewModelLocator.SetAutoWireViewModel(view, true); Check.That(view.BindingContext).IsInstanceOf <AViewModel>(); autoWireViewModel = ViewModelLocator.GetAutoWireViewModel(view); Check.That(autoWireViewModel).IsTrue(); }
public static void AutowireViewModel(object viewOrViewModel) { if (viewOrViewModel is FrameworkElement view && view.DataContext is null && ViewModelLocator.GetAutoWireViewModel(view) is null) { ViewModelLocator.SetAutoWireViewModel(view, true); } }
public async Task <IDialogResult> ShowDialog(string name, IDialogParameters parameters = null, string IdentifierName = "Root") { if (parameters == null) { parameters = new DialogParameters(); } var content = _containerExtension.Resolve <object>(name); if (!(content is FrameworkElement dialogContent)) { throw new NullReferenceException("A dialog's content must be a FrameworkElement"); } if (dialogContent is FrameworkElement view && view.DataContext is null && ViewModelLocator.GetAutoWireViewModel(view) is null) { ViewModelLocator.SetAutoWireViewModel(view, true); } if (!(dialogContent.DataContext is IDialogHostAware viewModel)) { throw new NullReferenceException("A dialog's ViewModel must implement the IDialogAware interface"); } viewModel.IdentifierName = IdentifierName; DialogOpenedEventHandler eventHandler = async (sender, eventArgs) => { var content = eventArgs.Session.Content; eventArgs.Session.UpdateContent(new ProgressDialog()); if (viewModel is IDialogHostAware aware) { await aware.OnDialogOpenedAsync(parameters); } eventArgs.Session.UpdateContent(content); }; return((IDialogResult)await DialogHost.Show(dialogContent, viewModel.IdentifierName, eventHandler)); }
private FrameworkElement GetDialogContent(string name, string IdentifierName = "Root") { var content = _containerExtension.Resolve <object>(name); if (!(content is FrameworkElement dialogContent)) { throw new NullReferenceException("A dialog's content must be a FrameworkElement"); } if (dialogContent is FrameworkElement view && view.DataContext is null && ViewModelLocator.GetAutoWireViewModel(view) is null) { ViewModelLocator.SetAutoWireViewModel(view, true); } if (!(dialogContent.DataContext is IHostDialogAware viewModel)) { throw new NullReferenceException("A dialog's ViewModel must implement the IDialogHostAware interface"); } viewModel.IdentifierName = IdentifierName; return(dialogContent); }