WPF MVVM實現ListBox添加不同的控件


和之前一樣,新建一個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類,內容如下圖

最后看看運行的效果如下圖顯示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM