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

摘要:
如前所述,创建WPF项目、Models、Views、ViewModels文件夹,并添加Selector文件夹。

和之前一样,新建一个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;
        }
    }

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

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

分别按顺序图如下

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

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

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

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

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

图片按顺序分别如下

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

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

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

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

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添加不同的控件第10张

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

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

免责声明:文章转载自《WPF MVVM实现ListBox添加不同的控件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇elasticsearch内存优化设置Javascript 文件操作(整理版)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WPF 自定义快捷键命令(Command)

本文来自:http://tech.ddvip.com/2010-07/1279771103157919_2.html 命令简介 WPF 中的命令是通过实现 ICommand 接口创建的。ICommand 公开两个方法(Execute 及 CanExecute)和一个事件(CanExecuteChanged)。 Execute 执行与命令关联的操作。CanE...

C#探秘系列(九)WPF连接Mysql数据库

两个函数即可搞定: private void GetData() { MySqlConnection connection = new MySqlConnection(myConnectionString); connection.Open(); if (conn...

贫民窟里的WPF系列讲座(一)

最近讲了一套完整的WPF课程,感觉教学效果还很不错。我准备给MSDN录15期左右的事情,这几篇文章是配合视频一起来看的。我相信大家都是很喜欢研究新技术的,但是研究新技术的时候会遇到很多困难,譬如书籍的选择,工具的选择,环境的配置等等很多很多问题。 这里我结合自己学习的历程,分享一下。这里我说一下我当时学习的硬件条件,由于我的笔记本是IBM的T40,CPU是...

wpf中遍历界面控件的方法

/// <summary>/// 遍历界面中的所有控件/// </summary>/// <param name="uiControls"></param>private void SetNotEditable(UIElementCollection uiControls){foreach (UIElemen...

WPF ListView / ListBox 更新绑定数据源时,自动刷新界面显示

问题现象:ListView 更新绑定数据源时,界面不能自动刷新。 原因及解决方案: 1、ListView 的 ItemSource 使用 BindingList < T >; 注:由于 List < T > 没有实现 INotifyPropertyChanged 接口, 因此若使用 List < T > 作为 ItemS...

2019-11-29-WPF-禁用实时触摸

title author date CreateTime categories WPF 禁用实时触摸 lindexi 2019-11-29 10:20:52 +0800 2018-5-4 21:0:38 +0800 WPF 触摸 微软想把 WPF 作为 win7 的触摸好用的框架,所以微软做了很多特殊的兼容。为了获得真实的触摸消息,微软提供了...