MVVM (with WPF) - Binding Multiple Views to the Same ViewModel

前端 未结 4 1971
旧巷少年郎
旧巷少年郎 2020-12-24 14:54

I have recently started investigating the MVVM pattern with WPF for an upcoming project. I started with Josh Smith\'s MSDN article. I have a question (well many, but let\'s

4条回答
  •  夕颜
    夕颜 (楼主)
    2020-12-24 15:15

    Thanks for pointing me in the right direction! I am still new with WPF too and learning about all the different possibilities including binding methods. Anyway for anyone interested, here is the solution I arrived at for this particular case:

    I decided I wanted to keep the view models separated in two subclasses AddIndividualViewModel and EditIndividualViewModel which only expose commands, rather than trying to manage state in the one class. However I wanted one view so that I'm not duplicating the XAML. I ended up using two DataTemplates and DataTemplateSelector to switch out the action buttons depending on the view model:

            
                
            
    
            
                
            
    
            
    

    and a content presenter at the bottom of the form:

            
    

    Here is the code for the template selector:

    class AddEditTemplateSelector : DataTemplateSelector
    {
        public DataTemplate AddTemplate { get; set; }
        public DataTemplate EditTemplate { get; set; }
    
        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            if (item is AddIndividualViewModel)
            {
                return AddTemplate;
            }
            else if (item is EditIndividualViewModel)
            {
                return EditTemplate;
            }
    
            return null;
        }
    }
    

    This may or may not be how implement the final thing (given the requirements) but it's good to see I have this sort of option available.

提交回复
热议问题