簡體   English   中英

服務返回null wpf mvvm

[英]service is returning null wpf mvvm

我正在嘗試在我的數據上下文中綁定數據,但是服務返回null。 我使用ninject作為DI。 我正在共享我的app.xaml.cs代碼。 請指導我。

public partial class App
{
    private IKernel container;

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        AutoMapperConfig.RegisterMappings();
        ConfigureContainer();
        ComposeObjects();
        Current.MainWindow.Show();
    }

    private void ConfigureContainer()
    {
        this.container = new StandardKernel();
        container.Bind(typeof(IAppServiceBase<>)).To(typeof(AppServiceBase<>));
        container.Bind<IJvDetailAppService>().To<JvDetailAppService>().InSingletonScope();
        container.Bind<IJvMasterAppService>().To<JvMasterAppService>().InSingletonScope();
        container.Bind<IJvDimensionAppService>().To<JvDimensionAppService>().InSingletonScope();
        container.Bind(typeof(IServiceBase<>)).To(typeof(ServiceBase<>));
        container.Bind<IJvDetailService>().To<JvDetailService>();
        container.Bind<IJvMasterService>().To<JvMasterService>();
        container.Bind<IJvDimensionService>().To<JvDimensionService>();

        container.Bind(typeof(IRepositoryBase<>)).To(typeof(RepositoryBase<>));
        container.Bind<IJvDetailRepository>().To<JvDetailRepository>();
        container.Bind<IJvMasterRepository>().To<JvMasterRepository>();
        container.Bind<IJvDimensionRepository>().To<JvDimensionRepository>();
    }

    private void ComposeObjects()
    {          
        Current.MainWindow = this.container.Get<MainWindow>();
        Current.MainWindow.Title = "JustApp";
    }
}

MainWindowViewModel

public class MainWindowViewModel : ViewModelBase
{
    private readonly BackgroundWorker _worker = new BackgroundWorker();

    private ObservableCollection<JvDetailViewModelBase> _jvDetailMenu;
    private readonly IJvDetailAppService _jvDetailAppService;

    public ObservableCollection<JvDetailViewModelBase> JvDetailMenu
    {
        get { return this._jvDetailMenu; }
        set
        {
            _jvDetailMenu = value;
            RaisedPropertyChanged("JvDetailMenu");
        }
    }

    public MainWindowViewModel()
    {
        _worker.DoWork += worker_DoWork;
        _worker.RunWorkerCompleted += worker_RunWorkerCompleted;
        _worker.RunWorkerAsync();

    }

    readonly ObservableCollection<JvDetailViewModelBase> _tempProductMenu = new ObservableCollection<JvDetailViewModelBase>();
    private void worker_DoWork(object sender, DoWorkEventArgs e)
    {
      _tempProductMenu.Add(new ModifyJvDetailViewModel(_jvDetailAppService));
    }

    private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (_tempProductMenu.Any())
        {
            JvDetailMenu = _tempProductMenu;
        }
    }
}

ModifyJvDetailViewModel.cs

public class ModifyJvDetailViewModel : JvDetailViewModelBase
{
    private readonly BackgroundWorker _worker = new BackgroundWorker();

    private IEnumerable<JvDetail> _tempLoadJvDetails;

    private readonly IJvDetailAppService _jvDetailAppService;

    private void worker_DoWork(object sender, DoWorkEventArgs e)
    {
        int ab = _jvDetailAppService.GetByCompanyId(3).Count(); // it is returning null here and everywhere which is fetching records.
        _tempLoadJvDetails = _jvDetailAppService.GetByCompanyId(3);
    }
    private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        JvDetails = _tempLoadJvDetails;
    }
    public override string Name
    {
        get { return JustAppHelper.JvDetail; }
    }

    public override string Icon
    {
        get { return JustAppHelper.JvDetailIcon; }
    }


    public ModifyJvDetailViewModel(IJvDetailAppService jvDetailAppService)
    {
        _jvDetailAppService = jvDetailAppService;
        var ab = _jvDetailAppService.GetAll().Count();

        _worker.DoWork += worker_DoWork;
        _worker.RunWorkerCompleted += worker_RunWorkerCompleted;
        _worker.RunWorkerAsync();
        BindGrid();

    }

    protected void BindGrid()
    {
        JvDetails = _jvDetailAppService.GetByCompanyId(3);
    }

    private IEnumerable<JvDetail> _jvDetails;
    public IEnumerable<JvDetail> JvDetails
    {
        get { return _jvDetails; }
        set
        {
            _jvDetails = value;
            RaisedPropertyChanged("JvDetails");
        }
    }
}

主窗口

public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainWindowViewModel();
            ListBoxProducts.SelectedIndex = 0;
        }
    }

一種方法是更改MainWindowViewModel構造函數:

public MainWindowViewModel(IJvDetailAppService detailAppService)
{
    _jvDetailAppService = detailAppService;

    _worker.DoWork += worker_DoWork;
    _worker.RunWorkerCompleted += worker_RunWorkerCompleted;
    _worker.RunWorkerAsync();
}

MainWindow構造函數:

public MainWindow(IJvDetailAppService detailAppService)
{
    InitializeComponent();
    this.DataContext = new MainWindowViewModel(detailAppService);
    ListBoxProducts.SelectedIndex = 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM