|
mvvm концепция
|
|||
---|---|---|---|
#18+
потихоньку вроде воткнул, но часть вопросов висит ) Можно ли замутить (у меня пока эйфория от C# и тех плюшек которые пропустил - --- голова кругом ))) не обращайте вним ))) ) Сейчас наверное спрошу полную фигню, готов к осуждению )) Хочу уйти от много-повторяющихся движух. Допустим у меня есть класс, который тянется от Entity, есть контекст данных, есть вьюшка и есть вьюмодель. Вьюшка дернет ICommand скажем на добавление, который дернет конкретную реализацию во вьюмодель, скажем addCommand. Замечательно, это работает, но хочется еще более универсилизировать, а мозгов видимо не хватает... спишем на усталось ну или на возраст на крайняк ))) Вопросов два 1. Подумалось форму редактор прилепить в виде свойства или что то в этом духе, но думается не правильно 2. Просто в команде уже вызывать форму редактор, но то же ..как то..... Как правильно друзья подскажите, отвязавшись от модели и представления привязать форму редактирования , которая будет жить в контексте и которой этот контекст можно передать p.s. Прежде чем лезть к Вам с вопросами, нашел предварительные реализации, реализовал, но что то смущает и что то не нравится. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2019, 22:45 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
kill_zdmреализовалпоказывай. Но общее правило - не надо в первом своем коде "универсализировать". MVVM не догма. Не беги так быстро). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 07:13 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
Petro123kill_zdmреализовалпоказывай. Но общее правило - не надо в первом своем коде "универсализировать". MVVM не догма. Не беги так быстро). Только не смейтесь, я только учусь и с каталогами еще перемутил, потом подправлю :) Хотя нет, смейтесь и ругайте где что не так это будет полезнее )) 1. Вьюшка Properties.xaml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40.
внедрен tp:TopPanel ну пока на что ума хватило, это юзерконтрол с пимпами, пока две команды добавить и редактировать 2. TopPanel.xaml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
3. Модель Properties.cs сгенерированная Entity using System; using System.Collections.Generic; Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
4. Обобщающий ViewModelBase, по сути пока просто реализующий интерфейс класс INotifyPropertyChanged Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
5. Еще создал прослойку для ICommand CommandAction.cs по сути пока то же тупо реалзующий без затейлиовсти интерфейс Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.
6. PropertiesModel наследуется от ViewModelBase , вьюшка Properties.xaml которого дернет команды. class PropertiesModel : ViewModelBase { dbContext ctx = new dbContext(); public PropertiesModel() { Properties = ctx.Properties.ToList(); PropertiesView = new ListCollectionView(Properties); PropertiesView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending)); } public ListCollectionView PropertiesView { get; } private List<Properties> _properties; public List<Properties> Properties { get => _properties; set { _properties = value; NotifyPropertyChanged(); } } private CommandAction addCommand; public CommandAction AddCommand { get { return addCommand ?? (addCommand = new CommandAction(obj => { ctx.SaveChanges(); InsUpd(true); })); } } private CommandAction editCommand; public CommandAction EditCommand { get { return editCommand ?? (editCommand = new CommandAction(obj => { InsUpd(false); })); } } private void InsUpd(bool isNew) { Properties prop = (isNew == true) ? new Properties() : (PropertiesView.CurrentItem as Properties); ModernDialog edit = new PropertyEdit(); edit.DataContext = prop; ctx.Properties.Attach(prop); edit.ShowDialog(); if (edit.DialogResult == true) { ctx.SaveChanges(); if (isNew == true) Properties.Add(prop); PropertiesView.Refresh(); if (isNew == true) PropertiesView.MoveCurrentTo(prop); } } } Воот, но тут я конкретно указал дернуть ModernDialog edit = new PropertyEdit(); не обращайте вним, тут может быть любая из форм, пока просто игрался с Modern UI параллельно, так вот, механизм то в целом будет всегда похожий и вот как бы это универсилизировать, т.е. по факту ..может глупость конечно, что то типа 1. Опеределить obj по имени на входе команды 2. Соблюдя именованность в проекте,..скажем пришло , что то с именем Property значит найди Property+"Edit" , а так же еще и пихни каким то образом склееный варик (PropertiesView.CurrentItem as Properties) что то я загнался походу ))))) хотя ))) что то похожее в дэлфи я реализовывал )) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 08:56 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
6. забыл обрамить в код Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 09:03 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
ой, забыл еще, там свети Loaded="OnLoad" событие в TopPanel где кнопки, то же пока ни чего умнее не придумал как public TopPanel() { InitializeComponent(); } void OnLoad(object sender, RoutedEventArgs e) { btnAdd.CommandParameter = this.Sender; btnEdit.CommandParameter = this.Sender; } пихнуть параметром команду, т.е. к примеру, у меня есть -справа дерево слева товары, во вьюмодель оба внедрены, сверху у обоих эти кнопки , как мне определить кто вызвал? на скороую руку сделал так,но мне кажется это не правильно public CommandAction AddCommand { get { return addCommand ?? (addCommand = new CommandAction(obj => { if (obj.Equals("Category")) { ..... xaml встроенной топпанели которая это дернет <tp:TopPanel x:Name="tPanelCategory" Sender="Category" /> может ошибаюсь но как то не по феньшую мне кажется ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 10:33 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
kill_zdm, по примеру из своего кода дэлфи, модели обозначаю ее форму редактора, предпологается, что будет вызвана форма с похожем именем + суффиксы и префиксы. И если дернул скажем Propertis то вызовется форма PropertisEdt , либо какая то экслюзивная форма FormEditOver, либо упадет )))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 11:00 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
kill_zdm, Ты говорил у тебя DevExpress был. Там не надо ничего писать. Все редакторы вызывались по типу колонки или поля проставленному в дизайне. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 11:11 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
kill_zdmголова кругомсделай демку просмотра БЕЗ РЕДАКТИРОВАНИЯ. Потом второй версией редактирование и в отдельной теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 11:20 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
[quot Petro123]kill_zdm, Ты говорил у тебя DevExpress был. он был и есть, вызывается форма по имени редактора, т.е. вопрос в чем - как найти класс или форму по имени и вызвать ее модально в с# если это возможно? а что там у меня за юзеринтерфейсы в виде гридов девэкспресс и т.д. в обще ну ни как не важно. К слову я думал тебя смутит более конструкция объявления переменной на ходу и обвинишь, что это не Delphi ))) с 10.3 мы теперь то же так можем ))) for var I := 0 to Screen.FormCount - 1 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 11:25 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
kill_zdm, Мне не нравится когда катят на дельфи про mdi, а там не пишут такого ооочень давно. Мне не понравилось что в дельфи ищут редакторы, хотя по умолчааниюю их не надо искать.. Вот я высказал удивление. А по сабжу я сказал. Не делай счас редакттирование. Компонуй формы, делай пагинацию и вью. Это имхо.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 12:06 |
|
mvvm концепция
|
|||
---|---|---|---|
#18+
Чтоб я, да на delphi катил? ) в любых проявлениях, но вот ты опять зацепился к mdi, я же пояснял и не раз, что имел в виду общее понятие, главная форма с дочками, а уж как реализовать, то и спрашивал + в контексте wpf особенностей ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2019, 12:19 |
|
|
start [/forum/topic.php?fid=21&fpage=3&tid=1440334]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
76ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 262ms |
total: | 437ms |
0 / 0 |