C# WPF中的静态资源

C# WPF中的静态资源,c#,wpf,xaml,inversion-of-control,C#,Wpf,Xaml,Inversion Of Control,我在WPF中有一个类,在XAML中作为视图控件引用: <ctrl:MyController x:Key="Controller"/> 但是,我现在需要使用IOC容器创建控制器。我可以使用以下代码执行此操作: Resources.Add("Controller", App.IocContainer.Resolve<MyController>()); Resources.Add(“Controller”,App.IocContainer.Resolve()); 但我必须

我在WPF中有一个类,在XAML中作为视图控件引用:

<ctrl:MyController x:Key="Controller"/>
但是,我现在需要使用IOC容器创建控制器。我可以使用以下代码执行此操作:

Resources.Add("Controller", App.IocContainer.Resolve<MyController>());
Resources.Add(“Controller”,App.IocContainer.Resolve());
但我必须从XAML中删除该行:

<ctrl:MyController x:Key="Controller"/>


这在运行时不是问题,但在尝试编辑XAML时确实会导致问题,因为所有绑定现在都表示“未找到资源控制器”。是否有任何方法允许IOC容器在运行时创建控制器,但仅为VS设计器在XAML文件中定义控制器?

您可以将静态定义的控制器保留在XAML中以满足设计器的要求,并在运行时使用容器中的适当控制器替换它

更新: 您是否可以使用DataContext而不是修改资源

this.DataContext = App.IocContainer.Resolve<MyController>()
this.DataContext=App.IocContainer.Resolve()

然后,您可以在XAML中指定数据上下文类型(d:DataContext),以使设计器满意并具有intellisense。

如果我尝试这样做,它会抱怨控制器没有公共无参数构造函数。在设计器中工作时,将
控制器
声明保留在XAML中,并在运行时将其注释掉?
this.DataContext = App.IocContainer.Resolve<MyController>()