是否可以通过XAML向WPF DataGrid添加一行或多行,而不将其绑定到集合。我正在寻找的东西基本上是这样的:
<DataGrid AutoGenerateColumns="False">
<DataGrid.Columns>
...
</DataGrid.Columns>
<DataGrid.Items>
<DataGridRow>
...
</DataGridRow>
</DataGrid.Items>
</DataGrid>
我将在设计时使用它来查看我的DataGrid列在没有实际运行代码的情况下的样子。
答案 0 :(得分:17)
感到幸运。自己找到了。这是最简单的方法。
创建具有相同公共属性的虚拟类(重要的是将成员定义为属性而不是字段)。例如:
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支持称为设计时数据的概念,可用于此目的。使用上述方法设计时数据的几个关键优势包括:
以下是创建设计时数据文件的步骤:
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来生成此文件。您也可以手动执行此操作。
现在在您的DataGrid(或您正在使用的任何控件)中,添加以下属性(根据您的项目更改文件路径):
d:DataContext="{d:DesignData Source=SampleData/TestDataListSampleData.xaml}"
ItemsSource
,Columns
等),示例数据将立即开始在设计器中显示。仅为完成,请注意Blend无法为泛型类生成自动数据。例如,如果您的VM类包含类型为List<string>
的属性(或者如果VM类本身是泛型类),则您将看不到在示例数据文件中生成该属性。在这种情况下,您必须创建自己的继承自泛型类的虚拟类,然后将其用作属性的类型。例如:
public class MyListOfStrings : List<string>
{ }