如何在 UWP Windows 10 中调试数据服务生成的测试数据

本文关键字:服务生 数据 测试数据 调试 UWP Windows | 更新日期: 2023-09-27 18:33:45

我有UWP应用程序,它使用MVVMLight和一个数据服务,它注入到我的ViewModel的构造函数中,数据服务在运行时工作正常。它从 Web 服务中提取数据,但是当我尝试构建一些测试数据时,我无法让它工作,以便我可以在 IDE 中以调试模式使用 UI。

这是我正在使用的:

视图模型定位器:

if (ViewModelBase.IsInDesignModeStatic)
  {
    SimpleIoc.Default.Register<IDataService,
    Design.DesignDataService>();
  }
else
  {
    SimpleIoc.Default.Register<IDataService>(() => new DataService());
  }

设计数据服务:

public class DesignDataService : IDataService
{
    public bool IsConnectedToInternet
    {
        get
        {
            return true;
        }
    }
    public Task<T> DownloadDataAsync<T>(string url)
    {
        switch (url)
        {
            case Urls.Data1Url:
                return Task.FromResult<T>(GetData1<T>());
            default:
                return Task.FromResult<T>(default(T));
        }
    }
}
private T GetData1<T>()
{
    ObservableCollection<Data1Model> items = new
            ObservableCollection<Data1Model>();
    items.Add(new Data1Model(){Name="Test1"});
    items.Add(new Data1Model(){Name="Test2"});
    return (T) Convert.ChangeType(items, typeof(T));
}

数据1页视图模型:

this.TemporaryItems = new ObservableCollection<Data1Model>();
this.Items = this.Items ?? (this.Items = new
             ObservableCollection<Data1Model>());
this.Items.Clear();
if (this.IsInDesignMode)
  {
    this.TemporaryItems = 
    this.DataService.DownloadDataAsync<ObservableCollection<Data1Model>>
    (Urls.Data1Url).Result;
    foreach (Data1Model tempItem in this.TemporaryItems)
{
      this.Items.Add(tempItem);
}
  }
  else
  {
    //deal with live data
  }

XAML:

<Page x:Class="MyApp.Views.NowNextPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="using:MyApp.Views"
    xmlns:converters="using:MyApp.Converters"
    xmlns:usercontrols="using:MyApp.UserControls"
    mc:Ignorable="d"
    DataContext="{Binding Source={StaticResource Locator}, 
                  Path=Data1PageViewModel}"
    SizeChanged="Page_SizeChanged"
    Loaded="Page_Loaded" >
<Grid Background="White">
    <ListView x:Name ="lvwData1"
              ItemsSource="{Binding Items}"  
              Background="White" 
              VerticalAlignment="Stretch" 
              HorizontalAlignment="Stretch"
              SelectedIndex="{Binding SelectedNowNextIndex, Mode=TwoWay}"
              SelectedItem="{Binding SelectedNowNextItem, Mode=TwoWay}"
              SelectionMode="None"
              ItemContainerStyle="{StaticResource ListViewItemStyle}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <usercontrols:Data1UserControl />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    <usercontrols:ProgressControl Visibility="{Binding IsLoadingData, Converter={StaticResource BoolToVisibilityConverter}}" 
                                  IsDataLoading="{Binding IsLoadingData}" 
                                  ProgressMessage="{Binding ProgressMessage}" >
    </usercontrols:ProgressControl>
</Grid>

为了这个问题,我简化了测试数据的创建,希望我没有弄乱任何名称,但如果有,请忽略我的代码,这些绝对是正确的。请记住,这在运行时按预期工作。

我尝试通过在 IsInDesignMode 条件下直接调用静态函数来摆脱对"调试数据服务"的调用:

foreach (Data1Model tempItem in Design.GetData1List())
{
this.Items.Add(tempItem);
}

但是在设计模式下它仍然不会显示我的数据。

我读过这篇非常好的文章:

Windows 10 开发:使用 Blend 添加设计时数据

虽然我没有像文章中那样 100% 地这样做,但它非常相似,但我一定错过了一些东西!

知道为什么我的ListView在 IDE 中不显示任何项目吗?

我可以做任何测试来检查"IsInDesignMode"部分是否真的被调用?

如何在 UWP Windows 10 中调试数据服务生成的测试数据

如果你想在设计模式下获取数据,你的 Web 服务前面 我认为这是不可能的,您需要创建一个模拟视图模型,以使用假数据填充设计模式下的所有数据。

此方法是在设计模式下查看所有数据的最简单方法。

如果您不想创建模拟视图模型,则可以创建一个模拟服务来获取所有用于测试目的的虚假数据。

通常,我在 ViewModel 的构造函数中调用所有方法来获取设计模式下的假数据,并且效果很好。我正在一个小例子中展示这种方法,我将在我的存储库中分享它。