感觉很幸运,我自己找到了。下面是最简单的方法。
创建一个虚拟类,具有相同的公共属性(重要的是将成员定义为属性而不是字段)。例如:
public class Dummy
{
public string Subject { get; set; }
public string Body { get; set; }
public DateTime DueDateStart { get; set; }
}
通过在顶部添加以下导入,将您的项目命名空间导入XAML:
xmlns:local="clr-namespace:YourProjectNamespace"
现在您可以像这样在设计时向DataGrid添加项目(行)(确保您的列具有正确的绑定):
<DataGrid AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Subject" Binding="{Binding Path=Subject}"/>
<DataGridTextColumn Header="Body" Binding="{Binding Path=Body}"/>
<DataGridTextColumn Header="Due Date" Binding="{Binding Path=DueDateStart}"/>
</DataGrid.Columns>
<local:Dummy Subject="Subject 1" Body="Body 1" ... />
<local:Dummy Subject="Subject 2" Body="Body 2" ... />
</DataGrid>
希望这能帮到某些人!
更新
由于这篇文章现在越来越受欢迎,我认为我应该用标准的方式来更新一下。
WPF支持一种称为设计时数据(Design-Time Data)的概念,可以完美地实现此目的。使用设计时数据相对于我上面提到的方法有一些关键优势,包括:
- 设计时数据与应用程序功能分开。
- 您不需要更改任何内容即可在设计模式和运行模式之间切换控件。
- 数据储存在易于编辑的XML文件中。
以下是创建设计时数据文件的步骤:
- 在Blend中打开您的项目(免费随VS2015和VS2017提供)。
- 打开您的视图(窗口或控件)。
- 从Data工具窗口(默认与Solution Explorer停靠),选择从类创建示例数据。
- 选择您的VM类。您应该选择与您的控件在运行时使用的
DataContext
相同的类。
Blend将自动为您创建一个包含样本数据的XML文件。文件将类似于:
<local:TestDataList xmlns:local="clr-namespace:YourNamespaceHere" Capacity="46" ID="33" Name="Maecenas curabitur cras">
<local:TestData ID="66" Name="Aenean vestibulum class"/>
<local:TestData ID="34" Name="Duis adipiscing nunc praesent"/>
<local:TestData ID="91" Name="Accumsan bibendum nam"/>
</local:TestDataList>
需要注意的是,您不需要 Blend 来生成此文件。您也可以手动完成此操作。
现在在您的数据网格(或任何您正在使用的控件)中,添加以下属性(根据您的项目更改文件路径):
d:DataContext="{d:DesignData Source=SampleData/TestDataListSampleData.xaml}"
假设您的控件已经设置好其属性(例如ItemsSource
、Columns
等),则示例数据将会立即在设计师中显示。
为了完整起见,请注意,Blend不能为泛型类生成自动数据。例如,如果您的VM类包含一个类型为List<string>
的属性(或者VM类本身是一个泛型类),那么您将无法在示例数据文件中看到该属性被生成。在这种情况下,您必须创建自己的虚拟类并从泛型类继承,然后将其用作您的属性类型。例如:
public class MyListOfStrings : List<string>
{ }
Class
文件,然后将自动生成的类置于该类文件的公共状态(并添加了一些需要的属性到该类中)。接着我必须在我的DataGrid
定义中添加xmlns:local="clr-namespace:namespace:YourNameSpaceHERE"
,像这样:<DataGrid xmlns:local="clr-namespace:YourNameSpaceHERE"> ... </DataGrid>
- Emir