Как перейти на MVVM
0 Zoya Sheikh [2013-08-30 18:20:00]
Я сделал приложение WPF, используя режим Devexpress и Ado.net Connectivity с базой данных. Я работал на других языках и теперь перешел на С#, я новичок в WPF. Я написал этот код для редактирования одиночных и сгруппированных строк:
void EditRow(int focRowHand, nrcsaEntities a)
{
Name nametext = grid.GetRow(focRowHand) as Name;
try
{
if (nametext.Name1 != string.Empty)
{
update_id = nametext.PK_ID;
txtName2.Text = update_text = nametext.Name1;
if (Panel3.Visibility == System.Windows.Visibility.Visible)
{
Panel1.Visibility = System.Windows.Visibility.Visible;
Panel3.Visibility = System.Windows.Visibility.Collapsed;
}
else
{
Panel1.Visibility = System.Windows.Visibility.Collapsed;
Panel3.Visibility = System.Windows.Visibility.Visible;
}
}
}
catch (Exception err)
{
DXMessageBox.Show(err.StackTrace);
}
}
private void ToggleButton1_Copy_Click(object sender, RoutedEventArgs e)
{
if (view.FocusedRowHandle == -1)
{
DXMessageBox.Show("Please Select any Item From Grid List");
}
else
{
try
{
int FocRowHand = view.FocusedRowHandle;
nrcsaEntities a = new nrcsaEntities();
if (grid.IsGroupRowHandle(FocRowHand))
{
int childCount = grid.GetChildRowCount(FocRowHand);
for (int i = 0; i < childCount; i++)
{
int childHandle = grid.GetChildRowHandle(FocRowHand, i);
EditRow(childHandle, a);
}
}
else
{
EditRow(FocRowHand, a);
}
}
catch (Exception ee)
{
DXMessageBox.Show(ee.StackTrace);
}
}
Поскольку мой клиент требует генерировать код с высоким качеством. Возможно, что более 1000 пользователей будут использовать это приложение и могут сохранять данные пользователей более 5000, мой вопрос таков: поскольку у меня меньше времени на отправку моего приложения моему клиенту. Если я хочу преобразовать этот код в MVVM, как сделать это, так как он мало сложный для преобразования для меня. Во-вторых, что вы думаете об этом качестве кода. Я очень смущаюсь по этому поводу. Я с нетерпением жду вашего ответа.
c# .net wpf mvvm
2 ответа
1 Решение Tameen Malik [2013-08-30 19:04:00]
Я предлагаю вам потратить больше дней со своего клиента и пойти на мастер Devexpress MVVM Scaffolding Wizard. Он готов к использованию. Вам нужно просто установить соединение с базой данных и просто изменить интерфейс своего приложения.
4 Sheridan [2013-08-30 18:52:00]
Все, что я могу вам сказать, это то, что если вы конвертируете это приложение в WPF и MVVM, в частности, вам нужно будет переписать много кода. Одна из проблем заключается в том, что WPF сильно отличается от других языков... большинство разработчиков сталкиваются с тяжелой борьбой при первом изучении WPF из-за этих различий.
Затем, если вы хотите использовать шаблон проектирования MVVM, все становится еще более отличающимся... например, он обычно недоволен написанием кода в коде за файлами. Конечно, можно использовать код за файлами, но мы склонны реализовывать Attached Properties
которые "обертывают" функциональность этих обработчиков событий управления пользовательским интерфейсом, например, SelectionChanged
.
Как правило, код, который вы нам показали, должен быть перемещен в модель представления, но тогда вы потеряете возможность ссылаться на свои элементы управления и, следовательно, вам придется искать другие способы повторной реализации того же поведения, но в режиме MVVM. Вам также потребуется реализовать загрузку экземпляров ICommand
для замены многих ваших обработчиков Click
и т.д.
Теперь, я должен признать, что мои комментарии до сих пор могут заставить вас думать, что я не рекомендую вам конвертировать ваш проект. Однако я не рекомендую вам конвертировать ваш проект. В WPF есть большие преимущества и использование шаблона MVVM... графика, анимация, стили и возможность управления каким-либо другим образом выглядят как-нибудь еще.
Последнее, что я хотел бы сделать, относится к вашему вопросу о "больших данных". WPF - это процессорная голодная инфраструктура... нет никакого способа обойти это. Это может быть медленным при рендеринге десятков тысяч элементов данных в симпатичные элементы пользовательского интерфейса. Тем не менее, после работы над крупномасштабным выражением на пару лет, я обнаружил, что есть способы улучшить ситуацию.
Мы можем заставить WPF использовать установленные графические карты или использовать виртуализированные панели, которые, кроме всего прочего, загружают только данные для видимых элементов. Вам действительно нужно услышать эту отрицательную сторону WPF перед тем, как начать конвертацию, потому что, как только она будет преобразована, будет слишком поздно. Я бы также рекомендовал, чтобы компьютеры, которые запускали приложение, были достаточно мощными, так или иначе.
Я надеюсь, что это "резюме" не было слишком негативным для вас и каким-то образом помогло. Я хотел бы закончить, сказав, что я лично являюсь большим поклонником WPF и MVVM.