我与Caliburn Micro制作了一个WPF程序,我在全局变量中使用单例类,这些变量用于多种形式和控件。
现在我明白不建议使用静态类,所以我想使用IoC容器重构它们。
但我不确定如何将数据网格绑定到我的xaml中由IoC容器管理的类。
以前,我有
<Datagid ItemSource = "Source={x:StaticResource statics.class.instance}" ...
如何创建一个适用于IoC容器的绑定?
答案 0 :(得分:0)
这是实现目标的一种方式:
视图: MyView.xaml
<UserControl x:Class="MyNamespace.MyView">
<DockPanel>
<Datagid Name="MyItems"/>
</DockPanel>
</UserControl>
视图模型: MyViewModel.cs
namespace MyNamespace
{
class MyViewModel : PropertyChangedBase
{
public ObservableCollection<MyItem> MyItems { get; }
public MyViewModel(MyStaticClass myStaticClass)
{
MyItems = ConvertMyStaticClassToObservableCollection(myStaticClass);
}
ObservableCollection<MyItem> ConvertMyStaticClassToObservabeCollection(MyStaticClass myStaticClass)
{
...
}
}
}
最后,您需要确保使用IoC容器将静态类设置为单例。以下是使用SimpleInjector在 MyBootstrapper.cs 中执行此操作的方法:
protected override void Configure()
{
_container = new Container();
_container.Register<IWindowManager, WindowManager>();
_container.Register<IEventAggregator, EventAggregator>();
_container.RegisterSingleton<MyStaticClass>();
_container.Verify();
}