WPF中的静态资源

4

我有一个在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容器在运行时创建控制器,但仅在VS设计器中定义控制器的XAML文件?


当您在设计器中工作时,请将XAML中的“Controller”声明保留,运行时只需将其注释掉即可。 - Sheridan
1个回答

0

您可以在XAML中保留静态定义的控制器以满足设计师,并在运行时从容器中替换为适当的控制器。

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

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

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


如果我尝试这样做,它会抱怨控制器没有公共的无参构造函数。 - Michael Edwards

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接