为什么用户控件不加载设计时数据
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}">
这将引用仅设计时视图模型。
在 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}">
这将引用仅设计时视图模型。