WPF中的静态资源

时间:2013-10-15 10:11:36

标签: c# wpf xaml inversion-of-control

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

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

我现在可以将其作为静态资源访问,一切都很好:

Command="{Binding Source={StaticResource Controller}, Path=HistoryFutureRetrieveLeft,
Mode=OneTime}">

但是我现在需要使用IOC容器创建控制器。我可以使用以下代码执行此操作:

Resources.Add("Controller", App.IocContainer.Resolve<MyController>());

但是我必须从XAML中删除该行:

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

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

1 个答案:

答案 0 :(得分:0)

您可以在XAML中保留静态定义的控制器以满足设计器,并在运行时将其替换为容器中的正确控制器。

<强>更新: 你能使用DataContext而不是修改资源吗?

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

然后,您可以在XAML(d:DataContext)中指定数据上下文类型,以使设计人员感到高兴并具有智能感知。