做这样的事情:
<DataTemplate DataType="{x:Type vm:AllCustomersViewModel}">
<vw:AllCustomersView />
</DataTemplate>
当我想将ResourceDictionary
应用于ViewModel
作为root用户时,UserControl
工作,但当我在UserControl
内有Page?``\ Would I create a
时我该怎么做for all my Pages then at the top of each
ResourceDictionary <Page.Resources>
<ResourceDictionary Source="../MainWindowResources.xaml"/>
</Page.Resources>
Page`的内容如下:
{{1}}
答案 0 :(得分:0)
(对于没有对这个问题发表评论我很抱歉。我的评论太长了。)
你能解释一下这个问题吗?
你有一个UserControl在自己的资源中有提到的DataTemplate,对吗?
现在你想在页面中使用这个控件,对吗?
您的问题是:您是否需要在使用它的每个页面中声明UserControl的资源?
如果只有用户控件本身需要访问这些资源,则不需要在其他地方重新声明它们。如果您希望这些资源可用于托管页面(或层次结构中的某些元素),则应在此处声明资源。如果它们应该在应用程序的任何位置可用,建议在应用程序级别声明它们。
答案 1 :(得分:0)
更好的选择是在App.xaml中包含资源。这样,在应用程序中显示ViewModel的任何地方都将获得模板。
答案 2 :(得分:0)
我同意安倍。您所要做的就是将资源字典文件添加到项目中(例如Resources.xaml
把
<DataTemplate DataType="{x:Type vm:AllCustomersViewModel}">
<vw:AllCustomersView />
</DataTemplate>
在里面。然后在App.xaml中输入以下内容:
<Application.Resources>
<ResourceDictionary Source="Resources.xaml"/>
</Application.Resources>
因此,每当WPF试图弄清楚如何呈现类(它当前不知道如何呈现)时,它会在控件资源中查找,如果没有模板,则检查控件容器资源。如果没有,它会继续上升,直到没有容器。然后转到Application.Resources。如果它找到它然后使用该模板呈现。如果没有,那么它只调用ToString()。把你所有的全局内容放在Application.Resources中,这样你就不会在你的应用程序中重复自己,保持干燥(不要重复自己)。
旁注。我发现this post是将大量ViewModel绑定到Views而不在资源字典中显式写入每个ViewModel的最简单的解决方案。它使用IValueConverter动态返回所需的视图。