【发布时间】:2015-10-04 08:20:57
【问题描述】:
我正在尝试在 WPF 中绑定设计时数据。我有一个 viewModel,我的设计时数据类继承自 View Model。我正在像这样在类的构造函数中填充我想在设计时看到的数据
public class SalesModelDesignTimeData : SalesModel
{
public SalesModelDesignTimeData()
{
Items.Add(new SaleItem { Sku = "001", Title = "Pepsi", CostPrice = 10.0, Quantity = 1 });
Items.Add(new SaleItem { Sku = "002", Title = "Coca Cola", CostPrice = 10.0, Quantity = 1 });
Items.Add(new SaleItem { Sku = "003", Title = "Colgate Tooth Paste", CostPrice = 8.0, Quantity = 1 });
Items.Add(new SaleItem { Sku = "004", Title = "Lipton Yello Label", CostPrice = 12.5, Quantity = 1 });
Items.Add(new SaleItem { Sku = "005", Title = "Sugar", CostPrice = 5.0, Quantity = 1 });
}
}
这里是 XAML
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:designData="clr-namespace:Tienda.UI.DesignTimeData"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" x:Class="Tienda.UI.Views.Sales"
Title="Sales" d:DesignWidth="775"
d:DataContext="{d:DesignInstance designData:SalesModelDesignTimeData,IsDesignTimeCreatable=True}">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<DataGrid HorizontalAlignment="Left" DataContext="{Binding Items}"/>
<TextBlock Text="{Binding Test}" Grid.Row="0" Grid.Column="1" />
</Grid>
我面临的问题是 VS 在我设置 d:DataContext 的 XAML 文件中给了我一个“对象引用未设置为对象错误的实例”
如果我从我的类中删除构造函数,那么错误就会消失并且它的绑定似乎可以工作。
谁能告诉我我做错了什么?
【问题讨论】:
-
d是一个命名空间,但您访问并分配了这个d:DataContext,这很奇怪。左侧应该是属性、依赖属性或字段,但所有这些成员都属于 class 或对象。那么这里的DataContext(用于d:DataContext)到底是什么?它肯定不是属性、dependencyProperty 或字段。 -
@Hopeless 我还是 WPF 新手,所以也许我犯了一个错误,但是在线阅读文章这似乎是绑定设计时数据的方法,就像这里提到的 msdn.microsoft.com/en-us/magazine/dn169081.aspx
-
从您的链接看起来
DataContext是一个属性,但我仍然从未使用过类似的东西,它是某种编辑器的约定/语言,而不是访问元素的正确逻辑。如果DataContext是属性d:DataContext仍然是对类的访问,所以看到这个d:DataContext=...有点混乱和无意义。也许这是一种在 XAML 中为某些元素设置属性的方法。
标签: c# wpf xaml data-binding