【问题标题】:Run Task after View loaded without ViewModel class in Prism在没有 Prism 中的 ViewModel 类的情况下加载视图后运行任务
【发布时间】:2020-11-22 15:58:24
【问题描述】:

您好,我希望一个任务在视图打开后立即运行,而不需要 ViewModel 类

我现在就是这样做的

 public class ContributorsViewModel : DemoViewModelBase<Model>
    {
        public ContributorsViewModel()
        {
            Task.Run(() => DataList = new DataService().GetDataList());
        }
    }

DemoViewModelBase:

 public class DemoViewModelBase<T> : BindableBase
        {
            private IList<T> _dataList;
    
            public IList<T> DataList
            {
                get => _dataList;
                set => SetProperty(ref _dataList, value);
            }
        }

引导程序:

    containerRegistry.RegisterForNavigation<ContributorsView>();

没有视图模型我不知道怎么做

【问题讨论】:

  • 请注意,应等待任何可等待的方法调用(如 Task.Run)。但是,您不能等待构造函数中的任何内容。应该有某种等待的异步初始化方法。
  • @Clemens 我的问题不是关于任务,而是关于如何在不需要视图模型的情况下调用 MVVM。
  • 这就是我写“作为笔记”的原因。除此之外,“在视图加载后”运行任务的明显方式是异步加载事件处理程序。

标签: c# wpf prism


【解决方案1】:

您可以在代码隐藏中做任何您想做的事情,例如订阅Loaded 事件:

internal class ContributorsView
{
    public ContributorsView()
    {
         InitializeComponents();
         Loaded += async (s, e) => await Task.Run( ...whatever... );
    }
}

但请记住:

  • 你将无法测试这个
  • 您不会从注入的依赖项中受益

没有 [...] ViewModel 类

这似乎是一个非常糟糕的主意 (*),因为您想要做的基本上就是视图模型的用途。

(*) 除非你有一些你没有透露的架构

【讨论】:

  • 我不想使用 code-Behind 我知道这可以通过 Bootstrapper 完成,但我不知道如何?
猜你喜欢
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 2015-03-02
相关资源
最近更新 更多