【问题标题】:c# Wpf datagrid databinding to IOC Classc# Wpf datagrid 数据绑定到 IOC 类
【发布时间】:2016-10-07 08:19:54
【问题描述】:

我使用 Caliburn Micro 制作了一个 WPF 程序,其中我将单例类用于我的全局变量,这些变量用于许多表单和控件。

现在我知道不推荐使用静态类,所以我想使用 IoC 容器重构它们。

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

以前,我有

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

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

【问题讨论】:

  • 你有这些类的实例吗?将它们设为属性并绑定到那些ItemsSource="{Binding SomeInstanceProperty.SomePropertyOfInstance}"
  • 你真的在使用 MVVM 吗?因为你有一个视图模型,它会有属性,你可以用从你的 IoC 容器中检索到的值填充这些属性,然后将你的数据网格的项目源绑定到这些属性之一。

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


【解决方案1】:

这是一种方法:

视图: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 容器将静态类设置为单例。以下是在 MyBootstrapper.cs 中使用 SimpleInjector 的方法:

protected override void Configure()
{
    _container = new Container();

    _container.Register<IWindowManager, WindowManager>();
    _container.Register<IEventAggregator, EventAggregator>();

    _container.RegisterSingleton<MyStaticClass>();

    _container.Verify();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2012-08-17
    • 2011-06-15
    相关资源
    最近更新 更多