Click here to Skip to main content
15,395,290 members
Home / Discussions / WPF
   

WPF

 
QuestionData Template Checkbox Binding Question Pin
Kevin Marois2-Jan-14 7:16
professionalKevin Marois2-Jan-14 7:16 
AnswerRe: Data Template Checkbox Binding Question Pin
Wayne Gaylard2-Jan-14 19:21
professionalWayne Gaylard2-Jan-14 19:21 
GeneralRe: Data Template Checkbox Binding Question Pin
Kevin Marois10-Jan-14 10:50
professionalKevin Marois10-Jan-14 10:50 
GeneralRe: Data Template Checkbox Binding Question Pin
Wayne Gaylard11-Jan-14 4:43
professionalWayne Gaylard11-Jan-14 4:43 
QuestionConvert xaml to C# Pin
Member 104997162-Jan-14 6:53
MemberMember 104997162-Jan-14 6:53 
SuggestionRe: Convert xaml to C# Pin
BenScharbach14-Oct-17 9:45
MemberBenScharbach14-Oct-17 9:45 
QuestionWPF DialogService Question Pin
Kevin Marois29-Dec-13 11:31
professionalKevin Marois29-Dec-13 11:31 
AnswerRe: WPF DialogService Question Pin
veboys30-Dec-13 5:08
Memberveboys30-Dec-13 5:08 
a rough example.

Interface
C#
public interface IDialogService<TDialogType, TViewModelType>
    where TDialogType : Window
    where TViewModelType : DialogBaseViewModel
{
    void RegisterView(Type dialogType, Type viewModelType);
    bool? ShowDialog(TViewModelType viewModel);
}


Implementation
C#
public class DialogService<TDialogType, TViewModelType> : IDialogService<TDialogType, TViewModelType>
    where TDialogType : Window
    where TViewModelType : DialogBaseViewModel
{

    private Dictionary<Type, Type> registry = new Dictionary<Type, Type>();

    public void RegisterView(Type dialogType, Type viewModelType)
    {
        if (!dialogType.IsSubclassOf(typeof(TDialogType)))
        {
            throw new ArgumentException(string.Format("The dialogType must be a subclass of type {0}.", typeof(TDialogType).Name), "dialogType");
        }
        if (!viewModelType.IsSubclassOf(typeof(TViewModelType)))
        {
            throw new ArgumentException(string.Format("The viewModelType must be a subclass of type {0}.", typeof(TViewModelType).Name), "viewModelType");
        }

        bool exists = registry.Where(x => x.Key == dialogType).Any();

        if (!exists)
        {
            registry.Add(dialogType, viewModelType);
        }
    }

    public bool? ShowDialog(TViewModelType viewModel)
    {
        Type dialogType = registry.Where(x => x.Value == viewModel.GetType()).Select(x => x.Key).FirstOrDefault();
        var dialog = (TDialogType)TypeDescriptor.CreateInstance(null, dialogType, null, null);


        dialog.DataContext = viewModel;
        dialog.ShowDialog();
        bool? result = dialog.DialogResult;
        return result;
    }
}


Usage
C#
DialogService<Window, DialogBaseViewModel> dialogService = new DialogService<Window, DialogBaseViewModel>();

dialogService.RegisterView(typeof(PersonView), typeof(PersonViewModel));
dialogService.RegisterView(typeof(InvoiceView), typeof(InvoiceViewModel));
dialogService.RegisterView(typeof(AnotherView), typeof(AnotherViewModel));

dialogService.ShowDialog(new PersonViewModel());

GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 6:56
professionalKevin Marois30-Dec-13 6:56 
SuggestionRe: WPF DialogService Question Pin
Ron Beyer30-Dec-13 5:39
professionalRon Beyer30-Dec-13 5:39 
GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 6:56
professionalKevin Marois30-Dec-13 6:56 
GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 7:06
professionalKevin Marois30-Dec-13 7:06 
GeneralRe: WPF DialogService Question Pin
Ron Beyer30-Dec-13 7:22
professionalRon Beyer30-Dec-13 7:22 
GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 7:22
professionalKevin Marois30-Dec-13 7:22 
GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 7:35
professionalKevin Marois30-Dec-13 7:35 
GeneralRe: WPF DialogService Question Pin
Ron Beyer30-Dec-13 7:46
professionalRon Beyer30-Dec-13 7:46 
GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 7:53
professionalKevin Marois30-Dec-13 7:53 
GeneralRe: WPF DialogService Question Pin
Ron Beyer30-Dec-13 8:03
professionalRon Beyer30-Dec-13 8:03 
GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 8:08
professionalKevin Marois30-Dec-13 8:08 
GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 8:45
professionalKevin Marois30-Dec-13 8:45 
GeneralRe: WPF DialogService Question Pin
Ron Beyer30-Dec-13 8:54
professionalRon Beyer30-Dec-13 8:54 
GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 9:18
professionalKevin Marois30-Dec-13 9:18 
GeneralRe: WPF DialogService Question Pin
Ron Beyer30-Dec-13 10:25
professionalRon Beyer30-Dec-13 10:25 
GeneralRe: WPF DialogService Question Pin
Kevin Marois30-Dec-13 10:28
professionalKevin Marois30-Dec-13 10:28 
GeneralRe: WPF DialogService Question Pin
Kevin Marois31-Dec-13 5:54
professionalKevin Marois31-Dec-13 5:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.