App.xaml 中声明的 WPF 隐式 DataTemplate 不会生效
在 MainWindow.xaml
中,我设置:
<Window.DataContext>
<vm:MainViewModel/>
</Window.DataContext>
在 App.xaml
文件中,我添加了以下内容:
<Application.Resources>
<DataTemplate DataType="vm:MainViewModel">
<v:MainView/>
</DataTemplate>
</Application.Resources>
我希望 MainWindow
能够自动加载并显示 MainView
,其 DataContext
属性设置为 Windows 的属性(如上所述在设计时设置为 MainViewModel
),但它行不通 - 的MainWindow
不使用 App.xaml
中设置的 DataTemplate
。
对于这个场景有更好的想法吗?
In the MainWindow.xaml
, I set:
<Window.DataContext>
<vm:MainViewModel/>
</Window.DataContext>
In the App.xaml
file, I added the following:
<Application.Resources>
<DataTemplate DataType="vm:MainViewModel">
<v:MainView/>
</DataTemplate>
</Application.Resources>
I was hoping the MainWindow
will automatically load and show the MainView
with its DataContext
property set to the windows's one (which was set to MainViewModel
at design-time as above), but it won't work - the MainWindow
doesn't use the DataTemplate
set in App.xaml
.
Any better ideas for this scenario?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该进行一些小的更改 -
首先,在您的窗口中。试试这个:
这会在您的窗口中创建一个内容项。 DataTemplates 通过将内容映射到新的视图来工作 - 在本例中,由于此处的内容是
MainViewModel
,因此它将自动创建并实例化一个新的MainView 为您服务。设置
DataContext
不会触发DataTemplates
,因为您永远不会将 ViewModel 设为对象的“内容”。如果您愿意,您可以通过直接设置窗口的内容来缩短此时间:
或者甚至将内容绑定到 DataContext(尽管这仅在您需要 DataContext 时才有意义) > 设置用于其他目的):
You should make a minor changes -
First, in your window. Try this:
This creates a single content item within your Window. DataTemplates work by mapping content to a new View - in this case, since the Content here is the
MainViewModel
, it will automatically create and instantiate a newMainView
for you. Setting theDataContext
will not triggerDataTemplates
, since you're never making the ViewModel "content" of an object.You can shorten this by just setting the Window's Content directly, if you prefer:
Or, even, binding the Content to the
DataContext
(though this only makes sense if you need theDataContext
set for some other purpose):我认为你需要
编辑:
我真的不认为我错了,代码
显示“自定义模板”。如果我删除
x:Type
,则会显示“WpfApplication1.ViewModel”,这是在视图模型对象上调用ToString()
的结果。这在没有DataTemplate
的情况下使用。I think you need
EDIT:
I really don't think I'm wrong, the code
shows “Custom template”. If I remove the
x:Type
, what's shown instead is “WpfApplication1.ViewModel”, which is the result of callingToString()
on the view model object. This is used in the absence of aDataTemplate
.