我是我的应用程序,我有一个ItemsControl元素,其中包含用户绘制的形状.每个特定形状的ViewModel都继承自基础ViewModel.DataTemplateSelector基于形状的ViewModel类型应用正确的DataTemplate.
在我的胜利xaml:
<ItemsControl ItemsSource="{Binding MarkupElements}"
ItemTemplateSelector="{StaticResource MarkupTemplateSelector}"/>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Panel.ZIndex="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)
在资源字典中:
<DataTemplate x:Key="MarkupLineTemplate" DataType="x:Type vm:MarkupLineViewModel">
<.../>
</DataTemplate>
<DataTemplate x:Key="MarkupCircleTemplate" DataType="x:Type vm:MarkupCircleViewModel">
<.../>
</DataTemplate>
<view:MarkupTemplateSelector
LineTemplate="{StaticResource MarkupLineTemplate}"
CircleTemplate="{StaticResource MarkupCircleTemplate}"
x:Key="MarkupTemplateSelector"/>
Run Code Online (Sandbox Code Playgroud)
这很好用,但Expression Blend不允许我编辑这些模板.我可以强制Blend应用一个特定的模板,但它会ItemTemplate在我的win.xaml中添加一个属性,设置为我选择的,覆盖选择器.
我正在使用MVVM Light Tookit,并尝试添加一些不同类型的设计时形状.Blend会显示它们,但它们对访问模板没有帮助.
有没有办法说服Blend我的派生ViewModel对DataContext有效,从而允许我编辑模板?这甚至是问题吗?