这个问题几乎说明了一切。
我有一个窗口,并尝试使用ViewModel的完整命名空间设置DataContext,但我似乎做错了什么。
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="BuildAssistantUI.ViewModels.MainViewModel">
5条答案
按热度按时间pw9qyyiw1#
试试这个。
jum4pzuy2#
除了其他人提供的解决方案(很好,也很正确)之外,还有一种方法可以在XAML中指定ViewModel,但仍然将特定的ViewModel与视图分离。当您希望编写独立的测试用例时,将它们分离是很有用的。
在应用程序xaml中:
在主窗口.xaml中:
dtcbnfnu3#
你需要示例化MainViewModel并将其设置为datacontext。在你的语句中,它只将其视为字符串值。
kxxlusnw4#
还有一种更好的指定视图模型的方法:
上述机制仅适用于主视图模型。为了解决下面询问用户控件的问题,该机制对子视图模型的解释如下:
ParentView.xaml:
<Rant>
之前提出的所有解决方案都要求视图模型具有无参数构造函数。微软的印象是系统可以使用无参数构造函数来构建。如果你也有这种印象,请务必继续使用其他一些解决方案。对于那些理解构造函数必须具有参数的人,因此对象的示例化不能留给魔术框架来处理,指定视图模型的正确方法是我上面展示的方法。</Rant>
rdrgkggo5#
你可能想试试Catel。它允许你定义一个DataWindow类(而不是Window),这个类会自动为你创建视图模型。这样,你就可以像在你最初的帖子中那样使用ViewModel的声明,视图模型仍然会被创建和设置为DataContext。
请参阅本文中的示例。