Mvvm UWP中带子目录的Prism自动ViewModelLocator

Mvvm UWP中带子目录的Prism自动ViewModelLocator,mvvm,uwp,prism,windows-10-universal,prism-6,Mvvm,Uwp,Prism,Windows 10 Universal,Prism 6,我不知道这是否是一个好的实践,但我想使用“视图”和“视图模型”目录中的子目录 我现在有这个密码 namespace Project.Universal.ViewModels.Sales { public class SalesListViewModel:ViewModelBase { // Properties private string _test; private ICollection<Sale> _sales;

我不知道这是否是一个好的实践,但我想使用“视图”和“视图模型”目录中的子目录

我现在有这个密码

namespace Project.Universal.ViewModels.Sales
{
    public class SalesListViewModel:ViewModelBase
    {
        // Properties
        private string _test;
        private ICollection<Sale> _sales;

        public string Test
        {
            get => _test;
            set => SetProperty(ref _test, value);
        }

        public ICollection<Sale> Sales {
            get => _sales;
            private set
            {
            }
        }

        // Services
        private readonly IStandardService<Sale> _salesService;

        // Commands
        public DelegateCommand Update { get;}

        // Constructor
        public SalesListViewModel(IStandardService<Sale> salesService)
        {


            Debug.WriteLine(">>>> Initializing SalesListViewModel, trying to set _salesService.");
            _salesService = salesService;

            Debug.WriteLine(">>>> Delegating command to update SalesListViewModel.");
            Update = new DelegateCommand(async () =>
            {
                Sales = await _salesService.GetAsync();
                Test = "Test";
            });
        }

    }
}
我使用的模板来自Windows template Studio和Prism 6.3框架。
对不起,我的英语不好。

下班后,我已经解决了我的问题:

Windows Template Studio已将
ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver()
方法更改为保持与其他框架的兼容性。我刚刚改变了这个方法,就像我想要的那样,这很有效。对于其他有同样问题的人,这里是代码

Class
App.xaml.cs

    protected override async Task OnInitializeAsync(IActivatedEventArgs args)
        {
            await ThemeSelectorService.InitializeAsync().ConfigureAwait(false);

            ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
            {
                var viewName = viewType.FullName; // get full type name
                var viewModelName = viewName
                    .Substring(0, viewName.Length - 4)
                    .Replace(".Views.", ".ViewModels.");
                var viewModelAssembly = viewType.GetTypeInfo().Assembly.FullName;
                //var viewModel
                var viewModelTypeName = string.Format(CultureInfo.InvariantCulture, "{0}ViewModel, Project.Universal", viewModelName);

                return Type.GetType(viewModelTypeName);
            });
            await base.OnInitializeAsync(args);
        }

嗨,我想目录不是问题,但是你的名称空间…你能尝试使用…视图模型和…视图吗?否则,您需要修改扫描类的方式。但是我不知道怎么做…哦,是的,我改变了我扫视班级的方式。我会发布我的解决方案,谢谢。
Views/Context/ViewPage.xaml for views
ViewModels/Context/ViewModel.cs for viewModels
    protected override async Task OnInitializeAsync(IActivatedEventArgs args)
        {
            await ThemeSelectorService.InitializeAsync().ConfigureAwait(false);

            ViewModelLocationProvider.SetDefaultViewTypeToViewModelTypeResolver((viewType) =>
            {
                var viewName = viewType.FullName; // get full type name
                var viewModelName = viewName
                    .Substring(0, viewName.Length - 4)
                    .Replace(".Views.", ".ViewModels.");
                var viewModelAssembly = viewType.GetTypeInfo().Assembly.FullName;
                //var viewModel
                var viewModelTypeName = string.Format(CultureInfo.InvariantCulture, "{0}ViewModel, Project.Universal", viewModelName);

                return Type.GetType(viewModelTypeName);
            });
            await base.OnInitializeAsync(args);
        }