gpt4 book ai didi

WPF 编程方法论

转载 作者:行者123 更新时间:2023-12-03 05:36:37 26 4
gpt4 key购买 nike

在我的应用程序中,我正在使用我的工具正在管理的软件的 API。我的 DAL 包含 16 个类,其中 3 个是单例。我在 .cs 文件和 XAML 中有一些逻辑。

我的问题是,我看到很多评论说用WPF编写的应用程序应该使用MVVM,这将使代码更可用和可读,我可以将我的代码转换为MVVM吗? MVVM 的实际含义是什么(不是维基百科或手动定义)?

我也使用SQL查询,并且读了一篇关于EF( Entity Framework )的论文,MVVM和EF可以在同一个项目中共存吗?

最佳答案

MVVM的实际含义是:UI不是Data。数据是数据,UI 是 UI

这意味着您不应该以程序逻辑(通常称为业务逻辑)紧密耦合或依赖于 UI 组件状态的方式开发应用程序,而应使其依赖于数据项的状态(例如它是模型或 View 模型)。

例如,在其他框架(例如 winforms)中,如果您有一个包含文本框和按钮的屏幕,通常会向按钮添加单击事件处理程序,然后从文本框中读取文本。在MVVM中,TextBox的Text属性应该绑定(bind)到ViewModel中的字符串属性,并且按钮也应该绑定(bind)到ViewModel中的Command。

这允许对 UI(即 ViewModel)进行抽象,因此,正如我之前所说,您的应用程序逻辑可以不依赖于 UI,而是依赖于 UI 的抽象。

这使得 UI 和逻辑具有巨大的可扩展性,并且还允许 UI 行为的多个方面的可测试性,因为 UI 行为的很大一部分是在 ViewModel 中定义的。

MVVM 还有其他方面,但主要实现就是这些。

编辑:

为了答案的完整性,我将添加一个具体示例:

1 - 非 MVVM WPF:

XAML:

<StackPanel>
<TextBox x:Name="txtLastName"/>
<Button Content="Click Me" Click="Button_Click"/>
</StackPanel>

隐藏代码:

private void Button_Click(object sender, EventArgs e)
{
//Assuming this is the code behind the window that contains the above XAML.
var lastname = this.txtLastName.Text;

//Here you do some actions with the data obtained from the textbox
}

2 - MVVM WPF:

XAML:

<StackPanel>
<StackPanel.DataContext>
<my:MyViewModel/>
</StackPanel.DataContext>
<TextBox Text="{Binding LastName}"/>
<Button Content="Click Me" Command="{Binding MyCommand}"/>
</StackPanel>

View 模型:

public class MyViewModel
{
public string LastName { get; set; }

public Command MyCommand { get; set; }

public MyViewModel()
{
// The command receives an action on the constructor,
// which is the action to execute when the command is invoked.
MyCommand = new Command(ExecuteMyCommand);
}

private void ExecuteMyCommand()
{
//Only for illustration purposes, not really needed.
var lastname = this.LastName;

//Here you do some actions with the data obtained from the textbox
}
}

正如您在上面的示例中看到的,ViewModel 根本不包含对 View 的引用。因此, View 可以是任何东西,只要 {Bindings} 保持在适当的位置。

使它们神奇地协同工作的粘合剂是 WPF UI 元素的 DataContext 属性,它是解析所有绑定(bind)的对象。

还有其他东西,例如 ViewModel 中的属性更改通知以启用双向绑定(bind),但这超出了本答案的范围。

另请记住,MVVM 是一种设计模式,而 WPF 是一种框架。 MVVM 目前也应用于其他技术(目前有很多关于 Web MVVM 的讨论,包括 JavaScript 等)

我建议你阅读其他答案中提到的书籍以及this Tutorial了解更多特定于 WPF 的方面。

关于WPF 编程方法论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14381402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com