Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVVM中,如果UI不';不需要更新吗?_C#_Wpf_Mvvm_Data Binding - Fatal编程技术网

C# 在MVVM中,如果UI不';不需要更新吗?

C# 在MVVM中,如果UI不';不需要更新吗?,c#,wpf,mvvm,data-binding,C#,Wpf,Mvvm,Data Binding,我正在用WPF编写一个自动化应用程序,它有一个页面,要求用户输入用户名、密码、服务器名、数据库用户名和数据库密码。我正在尝试使用MVVM编写应用程序,并且一直在关注视频和在线资源,但是大多数来源都简单地说,如果使用数据绑定,那么模型应该为属性更改属性事件,而他们就不这样做了。我的问题是,我认为属性更改事件是更新应用程序中UI的一种方式,但在输入用户名或密码时,我不需要更新UI。我只需要将输入的用户名存储在属性中,以便以后使用。因此,即使不需要更新UI,我想知道是否需要引发属性更改事件 publi

我正在用WPF编写一个自动化应用程序,它有一个页面,要求用户输入用户名、密码、服务器名、数据库用户名和数据库密码。我正在尝试使用MVVM编写应用程序,并且一直在关注视频和在线资源,但是大多数来源都简单地说,如果使用数据绑定,那么模型应该为属性更改属性事件,而他们就不这样做了。我的问题是,我认为属性更改事件是更新应用程序中UI的一种方式,但在输入用户名或密码时,我不需要更新UI。我只需要将输入的用户名存储在属性中,以便以后使用。因此,即使不需要更新UI,我想知道是否需要引发属性更改事件

public class Model
{
    private string username;
    private string serverName;
    private string password;

    //this is where my question is
    public string Username
    {
        get
        {
            return username;
        }
        set
        {
            if(username != value)
            {
                username = value;

                //if the username doesn't need to be updated in the UI
                //does the property changed event need to be raised or 
                //used?
                RaisePropertyChanged(Username);
            }
        }
    }
}

不,根据微软的文档,它只是一个变更通知,所以,如果你不需要它,它是不必要的。但我建议您不要直接在模型上使用de Property Change,将属性复制到ViewModel,然后在那里使用。尽可能保持您的模型最干净。我认为,如果您不需要更改属性,您的绑定可以是一种方式,这对性能更好


不,根据Microsoft文档,它只是用于更改通知,因此,如果您不需要它,它是不必要的。但我建议您不要直接在模型上使用de Property Change,将属性复制到ViewModel,然后在那里使用。尽可能保持您的模型最干净。我认为,如果您不需要更改属性,您的绑定可以是一种方式,这对性能更好


否。这应该是一个viewmodel,而不是一个模型,并且所有viewmodel都应该实现inotifypropertychanged(除非它们是依赖项对象,但这很少是一个好的计划)。只有需要通知更改的属性才需要这样做。将值从模型实例复制到vm并将视图绑定到vm是非常常见的。然后将vm返回到模型以进行更新。@helplessprogrammer如果永远不需要发出任何更改通知,则不应该发出任何更改通知。这并不是模型/视图模型的全部区别:例如,我几乎可以说任何带有命令的东西都是视图模型。但如果它只是一个带有属性的裸类,没有通知,可能还有一两个构造函数,那听起来确实像是一个模型。在一个类中,尽可能多的数据访问细节是专门用于此目的的,从广义上讲,这将是“模型”的一部分。因此,“模型”包括表示实体的模型类,以及用于从数据存储中检索这些实体类的类。在viewmodel领域中,UserListViewModel将转到用户列表的数据访问类,并为每个用户模型对象创建UserViewModel……也就是说,假设需要UserViewModel。我想不出比这更合适的例子了。可能一个InsurancePolicyViewModel会转到数据层来检索其准备金、索赔和付款及其客户的模型,并为所有这些实体创建相应的ViewModel。否。这应该是一个viewmodel,而不是一个模型,并且所有viewmodel都应该实现inotifypropertychanged(除非它们是依赖项对象,但这很少是一个好的计划)。只有需要通知更改的属性才需要这样做。将值从模型实例复制到vm并将视图绑定到vm是非常常见的。然后将vm返回到模型以进行更新。@helplessprogrammer如果永远不需要发出任何更改通知,则不应该发出任何更改通知。这并不是模型/视图模型的全部区别:例如,我几乎可以说任何带有命令的东西都是视图模型。但如果它只是一个带有属性的裸类,没有通知,可能还有一两个构造函数,那听起来确实像是一个模型。在一个类中,尽可能多的数据访问细节是专门用于此目的的,从广义上讲,这将是“模型”的一部分。因此,“模型”包括表示实体的模型类,以及用于从数据存储中检索这些实体类的类。在viewmodel领域中,UserListViewModel将转到用户列表的数据访问类,并为每个用户模型对象创建UserViewModel……也就是说,假设需要UserViewModel。我想不出比这更合适的例子了。也许一个InsurancePolicyViewModel会转到数据层来检索其准备金、索赔和付款及其客户的模型,并为所有这些实体创建相应的ViewModel。