为什么用户控件不加载设计时数据

Why User controls don't load design time data

在 Visual Studio 2015 年安装了最新的更新,正在为 Windows 10 UAP 做一个项目。我创建了一个这样的用户控件:

<UserControl
x:Class="App3.CustomControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App3"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">

<Grid>
    <GridView x:Name="gridView" ItemsSource="{Binding Elements}">
        <GridView.ItemTemplate>
            <DataTemplate>
                <Grid Width="50" Height="50" Background="Bisque">
                    <TextBlock Text="{Binding}"/>
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>

</Grid>

隐藏代码:

namespace App3{
public sealed partial class CustomControl : UserControl
{
    public CustomControl()
    {
        this.InitializeComponent();
        this.DataContext = new MainViewModel();
    }
}

}

MainViewModel

public class MainViewModel
{
    public List<int> Elements { get; set; }

    public MainViewModel()
    {
        Elements = Enumerable.Range(0, 100).ToList();
    }
}

我将该用户控件添加到 MainPage 并执行该应用程序。我在屏幕上看到 100 个元素。伟大的!但是由于我无法执行和编译数百万次,所以我希望设计时数据能够帮助我。

编辑 UserControl 时我什么也没看到!但是当在 MainPage 中时,我看到正在加载的元素。

我希望在同一个 UserControl 中看到正在加载的数据,因为这是我想要设计、编辑样式或加载数据的地方。

有什么帮助吗?谢谢

I expect to see in the same UserControl the data being loaded since that's where I want to design, edit styles or load data.

为此,您应该在 xaml 中设置 DataContext:

<UserControl.DataContext>
    <local:MainViewModel x:Name="viewmodel" />
</UserControl.DataContext>

并在 CustomControl 的代码中删除 DataContext:

public CustomControl()
{
    this.InitializeComponent();
    //this.DataContext = new MainViewModel();
}

你可以看到如下:

另一种方法是利用 d:datacontext 使用:

  d:DataContext="{d:DesignInstance {x:Type local:MyViewModelSample},IsDesignTimeCreatable=True}">

这将引用仅设计时视图模型。