c# - 如何迁移到 MVVM

标签 c# .net wpf mvvm

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

8年前关闭。




Improve this question




我使用 Devexpress 和 Ado.net 连接模式与数据库制作了 WPF 应用程序。我使用其他语言工作,现在转到 C#,我是 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,如何执行此操作,因为转换对我来说有点复杂。其次,您如何看待这种代码质量。我对此很困惑。我期待着您的回复。

最佳答案

我只能告诉您,如果您将此应用程序转换为 WPF 和特别是 MVVM,那么您将需要重新编写大量代码。一个问题是 WPF 与其他语言非常不同……由于这些差异,大多数开发人员在第一次学习 WPF 时都面临着艰难的斗争。

然后,如果您想使用 MVVM 设计模式,事情就变得更加不同了……例如,通常不赞成在代码隐藏文件中编写代码。当然也可以使用文件后面的代码,但是我们倾向于实现Attached Properties “包装”这些 UI 控件事件处理程序的功能,例如 SelectionChanged反而。

通常,您向我们展示的代码必须移动到 View 模型中,但随后您将失去引用控件的能力,因此您必须找到其他方法来重新实现相同的行为,但是以 MVVM 方式。您还需要实现 ICommand 的负载替换很多你的Click的实例处理程序等

现在,我必须承认,到目前为止,我的评论可能会让您认为我不建议您转换您的项目。但是,我不建议您转换您的项目。 WPF 和使用 MVVM 模式有很多好处……图形、动画、样式以及使任何控件看起来像其他任何东西的能力。

我想说的最后一点与您关于“大数据”的问题有关。 WPF 是一个处理器饥渴的框架......没有办法解决这个问题。将数以万计的数据项渲染成漂亮的 UI 元素时可能会很慢。但是,在从事大规模应用程序几年后,我发现有一些方法可以改善这种情况。

我们可以让 WPF 使用已安装的显卡的强大功能,或者使用只为可见项目加载数据的虚拟面板等等。在开始转换之前,您确实需要了解 WPF 的负面影响,因为一旦转换完成,就为时已晚。我还建议将运行该应用程序的计算机以一种或另一种方式变得足够强大。

我希望这个“总结”对你来说不是太消极,并且在某种程度上有所帮助。最后我想说的是,我个人是 WPF 和 MVVM 的忠实粉丝。

关于c# - 如何迁移到 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536394/

相关文章:

c# - 附加属性抛出 ParseException

c# - 为什么从 byte 到 sbyte 的转换会为优化代码提供错误的值?

c# - 如何向现有类添加 [OnDeserialized] 功能?

c# - BufferedImage 从 Java 到 C# 的等价物

c# - Resharper 是否有助于提高系统性能?

c# - 支持重复的多维键的字典?

c# - 创建搜索框控件

c# - 使用 WCF 更改规范化算法

c# - Internet Explorer 缓存从数据库返回的数据

c# - 在 C# wpf 项目中以编程方式将图像添加到 DataGrid - 如何?