public override DataTemplate SelectTemplate(object item, DependencyObject container) { if (item == null) return null; if(item is MyItemWrapper) { MyItemWrapper miw = item as MyItemWrapper; if(miw.Value is bool) { return BoolTemplate; } else if (miw.Value is Enum) { return EnumTemplate; } else if (miw.Value is string) { return StringTemplate; } else if(miw.Value is double) { return DoubleTemplate; } else if (miw.Value is int) { return IntTemplate; } return StringTemplate; } return null; }
public static MyItemWrapper Create(MyItem myItem) { Type valueType = myItem.Value.GetType(); if (valueType.IsEnum) { MyItemWrapper m = new MyItemWrapper(myItem); m.Items = Enum.GetValues(valueType); return(m); } else { return(new MyItemWrapper(myItem)); } }
public MainWindowsViewModel(IEnumerable <MyItem> myItems) { MyItems = new ObservableCollection <MyItemWrapper>(); foreach (MyItem i in myItems) { MyItemWrapper iw = MyItemWrapperFactory.Create(i); iw.PropertyChanged += (s, e) => { if (e.PropertyName == nameof(MyItemWrapper.Value)) { //se ho cambiato il valore, notifico la modifica di Modified RaisePropertyChanged(nameof(Modified)); RaisePropertyChanged(nameof(Title)); SaveCommand.RaiseCanExecuteChanged(); AcceptChangesCommand.RaiseCanExecuteChanged(); RejectChangesCommand.RaiseCanExecuteChanged(); } else if (e.PropertyName == nameof(MyItemWrapper.IsValueChanged)) { RaisePropertyChanged(nameof(Modified)); RaisePropertyChanged(nameof(Title)); SaveCommand.RaiseCanExecuteChanged(); AcceptChangesCommand.RaiseCanExecuteChanged(); RejectChangesCommand.RaiseCanExecuteChanged(); } }; MyItems.Add(iw); } //MyItems.Add(MyItemWrapperFactory.Create(MyItemWrapper.Element_Cognome, MyItemWrapper.Cat_2, 10)); //MyItems.Add(MyItemWrapperFactory.Create(MyItemWrapper.Element_Cognome, MyItemWrapper.Cat_2, 10)); //MyItems.Add(MyItemWrapperFactory.Create(MyItemWrapper.Element_Nome, MyItemWrapper.Cat_1, "Andrea")); //MyItems.Add(MyItemWrapperFactory.CreateForEnum(MyItemWrapper.Element_Palla, MyItemWrapper.Cat_3, (int)ETipoPalla.Rugby, typeof(ETipoPalla))); //MyItems.Add(MyItemWrapperFactory.CreateForEnum(MyItemWrapper.Element_Tavolo, MyItemWrapper.Cat_2, (int)ETipoTavolo.Pentagonale, typeof(ETipoTavolo))); //MyItems.Add(new MyItemWrapper(new MyItem() { Code = MyItemWrapper.Element_Cognome, Category = MyItemWrapper.Cat_2, Value = 10 })); //MyItems.Add(new MyItemWrapper(new MyItem() { Code = MyItemWrapper.Element_Nome, Category = MyItemWrapper.Cat_1, Value = "Andrea" })); //MyItems.Add(enumItem1); //MyItems.Add(new MyItemWrapper(new MyItem() { Code = MyItemWrapper.Element_Telefono, Category = MyItemWrapper.Cat_3, Value = true })); //MyItems.Add(new MyItemWrapper(new MyItem() { Code = MyItemWrapper.Element_Vetro, Category = MyItemWrapper.Cat_4, Value = "Bicchiere" })); //MyItems.Add(new MyItemWrapper(new MyItem() { Code = MyItemWrapper.Element_Ciao, Category = MyItemWrapper.Cat_3, Value = 12.5d })); //MyItems.Add(new MyItemWrapper(new MyItem() { Code = MyItemWrapper.Element_Perche, Category = MyItemWrapper.Cat_2, Value = 17.4d })); //MyItems.Add(enumItem2); //MyItems.Add(new MyItemWrapper(new MyItem() { Code = MyItemWrapper.Element_Porta, Category = MyItemWrapper.Cat_2, Value = "A soffietto" })); //MyItems.Add(new MyItemWrapper(new MyItem() { Code = MyItemWrapper.Element_Benzina, Category = MyItemWrapper.Cat_2, Value = "Diesel 75 ottani"})); //COMANDI SaveCommand = new RelayCommand(Save, CanSave); AcceptChangesCommand = new RelayCommand(AcceptChanges, CanAcceptChanges); RejectChangesCommand = new RelayCommand(RejectChanges, CanRejectChanges); // Collection which will take your ObservableCollection var _itemSourceList = new CollectionViewSource() { Source = MyItems }; GroupDescription gd = new PropertyGroupDescription("CategoryDescription"); _itemSourceList.GroupDescriptions.Add(gd); // ICollectionView the View/UI part MyCollectionView = _itemSourceList.View; // your Filter var yourCostumFilter = new Predicate <object>(ComplexFilter); //now we add our Filter MyCollectionView.Filter = yourCostumFilter; ChangeLanguageCommand = new RelayCommand <string>(ChangeLanguage); SetLanguage("it-IT"); }