Luk*_*ett 0 winrt-xaml windows-store-apps
我多年来一直是XAML开发人员,但这个让我很难过.我一直睡得很厉害,所以也许我很紧张.
只是使用Windows应用商店应用程序,我注意到LayoutAwarePage最近有一个DefaultViewModel,这很好,但我只在运行时设置.实际上,我们需要在设计时建立一个DataContext来查看真实的假数据.
因此,在使用一些更复杂的ViewModel连接代码失败之后,我对此并不起作用:
public sealed partial class TemplatePage : LayoutAwarePage
{
public TemplatePage()
: base()
{
this.DefaultViewModel = new ObservableDictionary<string, object>();
this.DefaultViewModel.Add("Name", "Design-time value.");
this.InitializeComponent();
}
...}
Run Code Online (Sandbox Code Playgroud)
VS2012和Blend都没有看到DataContext.当我单击为TextBlock创建数据绑定时,Blend报告
未设置数据上下文.选中"自定义"时,可以输入路径.
这在运行时工作,我的复杂的智能屁股也可以,但不是在设计师.这一切都改变了吗?我错过了备忘录吗?
更新
所以使用Channel9上的教程指导
我至少现在能够包含更多不起作用的代码.
我已经创建了一些扩展BindableBase的类形式的假数据源,就像教程有这样的设置一样,但是事情的XAML方面很奇怪.

XAML在Page元素级别表示构造一个DesignTimeDataHub对象并将其用作DataContext.然后,在根网格级别,使用将DataContext重置为CommonFakeData属性.
Grid下TextBlock的Blend Create Data Binding对话框似乎认为DataContext是在Page级别设置的!
无论我使用{Binding CommonFakeData.Title}还是{Binding Title}不起作用.
我显然搞砸了这一切.我很高兴他们更加努力,因为编写代码总是太容易了.
好的,我已经破解了.设置DataContext的格式应为:
d:DataContext="{Binding PropertyNameOfSubViewModel, Source={d:DesignInstance Type=myNamespace:ViewModelTypeName, IsDesignTimeCreatable=True}}"
Run Code Online (Sandbox Code Playgroud)
我现在将Page level DC作为DefaultViewModel.然后,我使用上面正确的DC设计时语法将另一个DC属性添加到布局根Grid元素.
然后TextBlock在其绑定中只需要SubViewModel上的属性名称.所以假数据视图模型是这样的粗糙:
public class DesignTimeDataHub : BindableBase // Probably doesn't need to be BindableBase.
{
public CommonBindableFakeData CommonFakeData { // get set }
}
public class CommonBindableFakeData : BindableBase
{
ctor { // set some default fake values }
public string Title { // get set }
}
Run Code Online (Sandbox Code Playgroud)
这是它的样子:

| 归档时间: |
|
| 查看次数: |
3228 次 |
| 最近记录: |