我正在使用4.0系列WPF工具的新d:DesignInstance功能.效果很好!
我遇到的唯一问题是:如何在实例上设置属性?鉴于这样的事情:
<Grid d:DataContext="{d:DesignInstance plugin:SamplePendingChangesViewModel, IsDesignTimeCreatable=True}"/>
Run Code Online (Sandbox Code Playgroud)
如何在viewmodel上设置属性,除了在默认ctor中设置属性还是通过其他对象初始化程序进行路由?
我试了一下但是VS在编译时出错"d:找不到DataContext":
<Grid>
<d:DataContext>
<d:DesignInstance IsDesignTimeCreatable="True">
<plugin:SamplePendingChangesViewModel ActiveTagIndex="2"/>
</d:DesignInstance>
</d:DataContext>
Run Code Online (Sandbox Code Playgroud)
目前我将回到使用资源和'd:DataContext = {StaticResource SampleData}',我可以在其中设置资源中的属性.
有没有办法通过广告来实现:DesignInstance?
aL3*_*891 23
作为@jberger你应该使用d:DesignData而不是内联a d:DataContext.
但是,您也可以在xaml文件中设置内联的d:DataContext,秘诀是使用正确的class(DesignProperties)来限定d:DataContext属性:
<d:DesignProperties.DataContext>
<plugin:SamplePendingChangesViewModel ActiveTagIndex="2"/>
</d:DesignProperties.DataContext>
Run Code Online (Sandbox Code Playgroud)
你怎么知道哪个班级符合资格?将鼠标悬停在属性语法中设置的属性上,将显示带有完全限定属性名称的工具提示.
另请注意,我不使用d:DesignInstance标记exstension作为其工作,具体是创建一个为您提供名称的类型的实例(如果它不能在设计时实例化,则生成该类型的代理).这不是我们想要的,我们想在这种情况下在内联xaml中定义实例.
实际上,d:DesignData(也是一个标记扩展)的工作方式大致相同,只是它查找xaml文件并将其反序列化为要使用的实际实例,而不是仅使用默认构造函数.
为了完整起见,我还应该提一下,您可以使用DesignData和DesignInstance以及元素语法,使用它们的完整类名(xxxExtension):
<d:DesignProperties.DataContext>
<d:DesignDataExtension Source="SampleData.xaml"></d:DesignDataExtension>
</d:DesignProperties.DataContext>
Run Code Online (Sandbox Code Playgroud)
这对于大多数标记扩展都是如此,但它不需要遵循这个命名对象(Binding类是一个值得注意的例外)更多信息可以在这里找到:
| 归档时间: |
|
| 查看次数: |
8209 次 |
| 最近记录: |