C#如何设置一个灵活的基础,以便在以后更改组件中的控件?

C#如何设置一个灵活的基础,以便在以后更改组件中的控件?,c#,wpf,assemblies,namespaces,wpftoolkit,C#,Wpf,Assemblies,Namespaces,Wpftoolkit,我对C#还是新手,我正在做一个项目,我们还使用WPF和WPF DataGrid工具包(见CodePlex),该工具包尚未发布到框架中。由于项目的性质,100%确定我们将在稍后更改程序集的一些控件。 我的同事们已经决定在我们项目的名称空间中重新定义datagrid中的每个控件,并指定程序集名称空间的特定控件。 因此,与其使用: clr命名空间:Microsoft.Windows.Controls.Primitives;组件=WPFToolkit clr命名空间:Microsoft.Windows.

我对C#还是新手,我正在做一个项目,我们还使用WPF和WPF DataGrid工具包(见CodePlex),该工具包尚未发布到框架中。由于项目的性质,100%确定我们将在稍后更改程序集的一些控件。 我的同事们已经决定在我们项目的名称空间中重新定义datagrid中的每个控件,并指定程序集名称空间的特定控件。 因此,与其使用: clr命名空间:Microsoft.Windows.Controls.Primitives;组件=WPFToolkit clr命名空间:Microsoft.Windows.Controls;组件=WPFToolkit 我们将使用自己的xxx.Controls和xxx.Controls.Primitives命名空间。 这样,就很容易改变ihnerited控件

不知何故,我对这个解决方案有一种不好的感觉,但我仍然缺乏经验,无法判断这样的方法是否合法,或者是否有另一个好的解决方案来满足我们的需求(稍后更改控件而不更改多个文件中的太多代码)


如果你能表达你对这种方法的看法,那就太好了。

你在说什么样的改变?在您知道实际需要更改什么之前,预先从每个类中派生似乎是浪费时间

当您确实需要更改某些内容时,此时创建派生类并修复任何引用应该不会太困难,因为这些引用可能只适用于某些实例,而不是所有实例。是的,这可能意味着签入涉及相当多的文件——但如果您使用的是一个合理的源代码管理系统,那么这将是一个原子级的变化,并且很明显它为什么会发生变化


按照您当前的方法,不会立即出现“这些是我们必须更改的控件”-如果您以“及时”的方式进行更改,您可以通过查看您实际必须创建的派生控件来判断。

您在谈论什么样的更改?在您知道实际需要更改什么之前,预先从每个类中派生似乎是浪费时间

当您确实需要更改某些内容时,此时创建派生类并修复任何引用应该不会太困难,因为这些引用可能只适用于某些实例,而不是所有实例。是的,这可能意味着签入涉及相当多的文件——但如果您使用的是一个合理的源代码管理系统,那么这将是一个原子级的变化,并且很明显它为什么会发生变化


按照您当前的方法,不会立即出现“这些是我们必须更改的控件”-如果您以“及时”的方式进行更改,您可以通过查看您实际必须创建的派生控件来判断。

我同意您的看法。这些改变,或者更确切地说,这些改变,可以是任何形式的。行为等,并及时做出改变。 不幸的是,这不是我的决定。有些顽固分子在工作:)

但让我感兴趣的是,是否存在对整个想法的完全不同的方法? 比如说,我有了一个DataGrid,项目不断发展,现在,我必须对DataGrid行的验证行为做一些重大的改变。 这也适用于许多控件

我们项目的问题是,我们有一种复杂的数据访问层,它不仅提供数据,而且实际控制数据。这意味着如果不包括数据访问层提供的一些逻辑,就不会读取、修改、删除或附加数据

例如,datagrid不直接删除行,而是覆盖删除行为并使数据访问层删除它。对于绑定,目前效果相当不错。
这种情况将适用于未来的许多其他事情,如CRUD操作、验证等。

我同意你的看法。这些改变,或者更确切地说,这些改变,可以是任何形式的。行为等,并及时做出改变。 不幸的是,这不是我的决定。有些顽固分子在工作:)

但让我感兴趣的是,是否存在对整个想法的完全不同的方法? 比如说,我有了一个DataGrid,项目不断发展,现在,我必须对DataGrid行的验证行为做一些重大的改变。 这也适用于许多控件

我们项目的问题是,我们有一种复杂的数据访问层,它不仅提供数据,而且实际控制数据。这意味着如果不包括数据访问层提供的一些逻辑,就不会读取、修改、删除或附加数据

例如,datagrid不直接删除行,而是覆盖删除行为并使数据访问层删除它。对于绑定,目前效果相当不错。 这种情况将在未来应用于许多其他事情,如CRUD操作、验证等