2

由于 WPF 中的 UserControls 必须具有无参数的构造函数,因此为它们提供相当复杂的数据的正确方法是“接近”构造时间所需的。我已经尝试为此使用依赖属性,但是遇到了 Visual Studio 设计器在尝试将诸如 a 之类的东西传递给Dictionary<string,MyObject>类型IDictionary<string,MyObject>化依赖属性时遇到的问题。在某些时候,它必须需要精确的编译时类型匹配,否则设计器中不会出现 XAML,尽管应用程序执行得很好。

基本上,我想要一种很好的方法来将通常会传递给构造函数的东西传递给用户控件。最好的方法是什么?

更新:有问题的用户控件将始终从 XAML 创建,因此除了无参数构造之外,还不能选择非无参数构造。

更新 2:一个有趣的想法是从无参数构造函数中访问一些东西,我可以从中获取我的初始化数据。可能会问这样一个问题:我已经初始化的祖先中的哪个实现了 IMyDataProvider 接口?这可能类似于相对源到祖先类型绑定的工作方式,除了从用户控件构造函数以编程方式完成。

4

2 回答 2

2

如果您遇到的唯一问题是传入派生类型,则可以传入一个简单的具体容器类,其中包含您的复杂类型作为属性。例如:

public class InitializationData
{
    public IDictionary<TKey, TValue> Dictionary { get; set; }
}

这种间接级别将克服 Visual Studio 设计器的限制。

于 2010-12-29T04:18:46.050 回答
1

几个选项。

1,您可以拥有多个构造函数,一个无参数的构造函数用于通过 XAML 创建控件时,另一个使用一组参数用于直接通过代码创建控件时。如果您绝对不想通过代码创建实例,那么...

2,添加一个公共属性,它只有一个setter,并用你想要传入的确切字典类型定义,并用作初始化控件的数据。该属性只需要调用一次。您可以拥有其他属性,即公开该初始化数据的 getter/setter,以便更通用的类型。

于 2010-12-29T01:14:58.367 回答