首页 > Windows开发 > 详细

WPF MVVM实现ListBox添加不同的控件

时间:2020-08-01 21:42:04      阅读:139      评论:0      收藏:0      [点我收藏+]

和之前一样,新建一个WPF工程,Models,Views,ViewModels文件夹,另外添加Selector文件夹。

第一,Selector文件夹中添加TemplateSelectorDemo类

    public class TemplateSelectorDemo: DataTemplateSelector
    {
        public DataTemplate CalendarDataTemplate { get; set; }

        public DataTemplate EllipseDataTemplate { get; set; }

        public DataTemplate RectangleDataTemplate { get; set; }

        public override DataTemplate SelectTemplate(object item, DependencyObject container)
        {
            if (container is FrameworkElement && item != null)
            {
                if (item is CalendarViewModel)
                    return CalendarDataTemplate;

                if (item is EllipseViewModel)
                    return EllipseDataTemplate;

                if (item is RectangleViewModel)
                    return RectangleDataTemplate;

                else return null;
            }
            return null;
        }
    }

技术分享图片

ViewModels中添加CalendarViewModel,EllipseViewModel,RectangleViewModel,MenuViewModel类

分别按顺序图如下

技术分享图片

技术分享图片

技术分享图片

技术分享图片

Views文件夹中添加CalendarView.xaml,EllipseView.xaml,MenuView.xaml,RectangleView.xaml页面

图片按顺序分别如下

技术分享图片

技术分享图片

技术分享图片

技术分享图片

MenuViewModel类中的内容如下

   public class MenuViewModel:Screen
    {
        public MenuViewModel()
        {
            CurrentViewModel =new CalendarViewModel()
            {
            };
            ViewModelsCollection.Add(CurrentViewModel);
            CurrentViewModel = new EllipseViewModel()
            {
            };
            ViewModelsCollection.Add(CurrentViewModel);
            CurrentViewModel = new RectangleViewModel()
            {
            };
            ViewModelsCollection.Add(CurrentViewModel);
        }

        private Screen _CurrentViewModel;
        public Screen CurrentViewModel
        {
            get { return _CurrentViewModel; }
            set { Set(ref _CurrentViewModel, value); }
        }

        private Screen _SelectedViewModel;
        public Screen SelectedViewModel
        {
            get { return _SelectedViewModel; }
            set { Set(ref _SelectedViewModel, value); }
        }

        private ObservableCollection<Screen> _ViewModelsCollection=new ObservableCollection<Screen>();
        public ObservableCollection<Screen> ViewModelsCollection
        {
            get { return _ViewModelsCollection; }
            set { Set(ref _ViewModelsCollection, value); }
        }

    }

在添加Bootstrapper类,内容如下图

技术分享图片

最后看看运行的效果如下图显示

技术分享图片

WPF MVVM实现ListBox添加不同的控件

原文:https://www.cnblogs.com/R00R/p/13415657.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!