C# WPF动态数据体系结构

C# WPF动态数据体系结构,c#,wpf,architecture,C#,Wpf,Architecture,因此,我在用一些动态数据元素构建特定解决方案时遇到了一定程度的困难 所以我有两个存储数据的地方——一个数据库和一个pdf文件(尽管我只写pdf文件——我从来没有读过)。您可以认为pdf的工作方式非常类似于数据库——只是表和pdf的模式不同。不同的字段将进入数据库和pdf。用户可以编辑某些字段,但不能编辑所有字段。我正在努力实现UI和逻辑的分离,但我遇到了困难。我的逻辑本质上是告诉我的UI要创建什么UI元素,以及要对它们实施什么限制(必需的、选项等),所以我觉得有点像是在我的业务逻辑中创建UI;但

因此,我在用一些动态数据元素构建特定解决方案时遇到了一定程度的困难

所以我有两个存储数据的地方——一个数据库和一个pdf文件(尽管我只写pdf文件——我从来没有读过)。您可以认为pdf的工作方式非常类似于数据库——只是表和pdf的模式不同。不同的字段将进入数据库和pdf。用户可以编辑某些字段,但不能编辑所有字段。我正在努力实现UI和逻辑的分离,但我遇到了困难。我的逻辑本质上是告诉我的UI要创建什么UI元素,以及要对它们实施什么限制(必需的、选项等),所以我觉得有点像是在我的业务逻辑中创建UI;但我真的不知道如何用动态数据元素实现这一点。完成后,我必须写入数据库,然后打印pdf


你基本上可以把这个问题想象成。。。“我有大量不同的数据。我需要用不同的数据块做不同的事情。我想不出一个通用的方法来做这件事而不进行一些编码。”有人有什么想法吗?

如果我是你,我会查看所有关于用户需要查看/编辑的字段的信息,看看我能看到哪些共同的主题。根据您的问题,我可能会创建一个包含以下内容的类/结构:

struct FieldInfo
{
    string FieldName;
    string DisplayName;
    string DataType;
    bool Required;
    delegate Validator;
    string OldValue;
}

delegate bool Validator(string input, out string message);

我将从业务逻辑返回FieldInfo[],然后在UI中使用该数组来确定向用户显示什么。这样,即使验证登录名也是您的业务登录名(使用委托),UI只需决定为每种类型显示哪些元素。您甚至可以更进一步,让FieldInfo结构有一个元素名,告诉UI该字段使用什么元素(文本框、DDL等)

如果我是您,我会查看用户需要查看/编辑的字段的所有信息,并查看我能看到的常见主题。根据您的问题,我可能会创建一个包含以下内容的类/结构:

struct FieldInfo
{
    string FieldName;
    string DisplayName;
    string DataType;
    bool Required;
    delegate Validator;
    string OldValue;
}

delegate bool Validator(string input, out string message);

我将从业务逻辑返回FieldInfo[],然后在UI中使用该数组来确定向用户显示什么。这样,即使验证登录名也是您的业务登录名(使用委托),UI只需决定为每种类型显示哪些元素。您甚至可以更进一步,让FieldInfo结构有一个元素名,告诉UI该字段使用什么元素(文本框、DDL等)

您所做的是开发应用程序框架,而不是应用程序。您可以通过查看其他应用程序框架(有10亿个)来了解其他人是如何解决这个问题的

我现在可以告诉您,您的项目的成功与您为处理元信息而设计的方案的好坏成正比。史蒂夫·麦康奈尔(Steve McConnell)关于数据比代码更容易调试的一般规则几乎是此类项目的指导原则


WPF非常非常适合这种情况。我一直在将自己的应用程序框架从Windows窗体移植到WPF,我有点惊讶于有多少代码我不必编写。

你所做的是开发一个应用程序框架,而不是一个应用程序。您可以通过查看其他应用程序框架(有10亿个)来了解其他人是如何解决这个问题的

我现在可以告诉您,您的项目的成功与您为处理元信息而设计的方案的好坏成正比。史蒂夫·麦康奈尔(Steve McConnell)关于数据比代码更容易调试的一般规则几乎是此类项目的指导原则


WPF非常非常适合这种情况。我一直在将自己的应用程序框架从Windows窗体移植到WPF,我对自己不必编写的代码感到惊讶。

这就是我一直在做的事情;这看起来有点像黑客。不过,谢谢。这正是我一直在做的事情;这看起来有点像黑客。不过,谢谢。看到您正在使用WPF,我假设您已经在使用C#3和.NET3.5了。您也在使用MS-SQL Server吗?看到您正在使用WPF,我假设您已经在使用C#3和.NET 3.5了。您是否也在使用MS-SQL Server?对某些数据位应用一些规则是可以的,与演示无关;是的,你需要某种形式的表示——但期望逻辑层来规定这些规则是合理的。应用一些规则来确定某些数据位会发生什么是可以的,与表示无关;是的,您需要某种形式的表示——但是期望逻辑层来规定这些规则是合理的。