Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.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# 具有相同型号的prism mvvm服务器和客户端_C#_Mvvm_Uwp_Prism - Fatal编程技术网

C# 具有相同型号的prism mvvm服务器和客户端

C# 具有相同型号的prism mvvm服务器和客户端,c#,mvvm,uwp,prism,C#,Mvvm,Uwp,Prism,我的服务器正在使用一个包含所有模型类的程序集(model.dll)。 我想在使用MVVM的UWP客户端应用程序中使用这些类 在MVVM中,我的所有模型类都必须继承BindableBase(Prism)。 有没有一种方法可以在我的客户机中使用相同的模型类,或者我必须重新创建它们,特别是为客户机 我能看到的唯一方式是所有模型类都继承BindableBase,但我在服务器上不需要这个依赖项 由于您希望在服务器和客户机上同时使用这些类,我想您正在考虑将它们放入PCL(可移植类库)中,因此每个模型只需维护

我的服务器正在使用一个包含所有模型类的程序集(model.dll)。 我想在使用MVVM的UWP客户端应用程序中使用这些类

在MVVM中,我的所有模型类都必须继承BindableBase(Prism)。 有没有一种方法可以在我的客户机中使用相同的模型类,或者我必须重新创建它们,特别是为客户机


我能看到的唯一方式是所有模型类都继承BindableBase,但我在服务器上不需要这个依赖项

由于您希望在服务器和客户机上同时使用这些类,我想您正在考虑将它们放入PCL(可移植类库)中,因此每个模型只需维护一个文件。这意味着您希望在客户机上使用的所有代码也可以在服务器上使用

Prism只是
INotifyPropertyChanged
的助手实现。因此,您可以使用
BindableBase
或自己实现
INotifyPropertyChanged
。无论哪种方式,您的后端都会有一些“前端”代码

请注意,为了能够使用
BindableBase
,您没有自动属性,但是可以使用属性设置器来触发
INotifyPropertyChanged
(在您自己实现接口时也是如此)

我通常做的是为我的模型创建一个PCL,添加NuGet包(它本身就是一个PCL),并在我的服务器上使用“前端”代码。如果您想知道Prism.Core中的代码是什么,这就是下面的所有内容。您不需要在服务器端引入Prism.Windows


你有什么选择

  • 写入所有模型两次,一次写入服务器的自动属性,一次写入客户端的BindableBase/INotifyPropertyChanged。我给它不到一个星期之前,你的模型是不一致的。如果这样的话,您可以进行代码(重新)生成,以生成双方中的一方
  • 用于INotifyPropertyChanged而不是Prism的BindableBase,您可以继续使用Prism的其余部分。但在我看来,这也有同样的问题,将Fody的属性带到服务器
  • 使用链接的项目文件在服务器和客户端之间共享模型,因此这些文件仍然只存在一次。使每个类都是分部的,在客户机中放置第二个分部类,并将Fody的属性放在该定义上。对我来说似乎很麻烦

结论:无论您使用的是Prism还是Fody,都要学会适应服务器端的小依赖性,它带来了单一模型的巨大优势。

既然您想在服务器和客户端上同时使用这些类,我想您正在考虑将它们放入PCL(可移植类库)中因此,每个模型只需维护一个文件。这意味着您希望在客户机上使用的所有代码也可以在服务器上使用

Prism只是
INotifyPropertyChanged
的助手实现。因此,您可以使用
BindableBase
或自己实现
INotifyPropertyChanged
。无论哪种方式,您的后端都会有一些“前端”代码

请注意,为了能够使用
BindableBase
,您没有自动属性,但是可以使用属性设置器来触发
INotifyPropertyChanged
(在您自己实现接口时也是如此)

我通常做的是为我的模型创建一个PCL,添加NuGet包(它本身就是一个PCL),并在我的服务器上使用“前端”代码。如果您想知道Prism.Core中的代码是什么,这就是下面的所有内容。您不需要在服务器端引入Prism.Windows


你有什么选择

  • 写入所有模型两次,一次写入服务器的自动属性,一次写入客户端的BindableBase/INotifyPropertyChanged。我给它不到一个星期之前,你的模型是不一致的。如果这样的话,您可以进行代码(重新)生成,以生成双方中的一方
  • 用于INotifyPropertyChanged而不是Prism的BindableBase,您可以继续使用Prism的其余部分。但在我看来,这也有同样的问题,将Fody的属性带到服务器
  • 使用链接的项目文件在服务器和客户端之间共享模型,因此这些文件仍然只存在一次。使每个类都是分部的,在客户机中放置第二个分部类,并将Fody的属性放在该定义上。对我来说似乎很麻烦

结论:无论您使用的是Prism还是Fody,都要学会适应服务器端的小依赖性,它带来了单一模型的巨大优势。

您需要
BindableBase
还是
INotifyPropertyChanged
?要求模型(甚至视图模型)从
BindableBase
派生听起来很奇怪,而实现
INotifyPropertyChanged
的模型非常好,您需要
BindableBase
还是
INotifyPropertyChanged
?要求模型(甚至视图模型)从
BindableBase
派生听起来很奇怪,而实现
INotifyPropertyChanged
的模型则非常好谢谢Bart。这就是我想读的:)我的模型类是.NET标准1.4(UWP仅支持此版本)。与.NET标准相比,使用PCL是否有优势?我认为.NET标准是共享库的“新”方式..NET标准是前进的方向,但是在我们开始之前,我们在大多数项目上都在等待V2.0版本(主要是因为涵盖的API)。如果1.4为您带来了足够的覆盖率,那么没有什么可以阻止您使用.NET标准。谢谢您,巴特。这就是我想读的:)我的模型类是.NET标准1.4(UWP仅支持此版本)。与.NET标准相比,使用PCL是否有优势?我认为.NET标准是共享库的“新”方式..NET标准是前进的方向,但是在我们开始之前,我们在大多数项目上都在等待V2.0版本(主要是因为涵盖的API)
private string _name;
public string Name
{
    get { return _name; }
    set { SetProperty(ref _name, value); }
}