c#Wpf datagrid数据绑定到IOC类

时间:2016-06-07 12:19:30

标签: c# wpf mvvm data-binding caliburn.micro

我与Caliburn Micro制作了一个WPF程序,我在全局变量中使用单例类,这些变量用于多种形式和控件。

现在我明白不建议使用静态类,所以我想使用IoC容器重构它们。

但我不确定如何将数据网格绑定到我的xaml中由IoC容器管理的类。

以前,我有

<Datagid ItemSource = "Source={x:StaticResource statics.class.instance}" ...

如何创建一个适用于IoC容器的绑定?

1 个答案:

答案 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();
}