我正在使用 (MainViewModel.cs) 中的类属性在运行时在 MainView.xaml 页面中加载视图和 ViewModel。
如果我仅绑定
Content
,视图会加载,但我使用 Binding 绑定视图和 ViewModel,则页面不会显示任何内容。
这是我的代码
这是我的主视图
<UserControl
x:Class="namespace.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:namespace"
d:DataContext="{d:DesignInstance Type=local:MainViewModel, IsDesignTimeCreatable=False}"
mc:Ignorable="d" \>
<TabControl
TabStripPlacement="Top"
HorizontalAlignment="Stretch"
VerticalAlignment="Stretch"
SelectedIndex="0"\>
<TabItem
Header="Base"
Content="{Binding BaseModuleView}"
DataContext="{Binding BaseModuleViewModel}" />
</TabControl\>
</UserControl\>
Content="{Binding BaseView}"
)然后它就可以工作了DataContext="{Binding BaseViewModel}"
) 它有效但是如果对
Contet
和 DataContext
都使用 Binding 则不起作用。
如果您有任何想法或建议让我尝试,那将会很有帮助
任何未显式指定源对象的 Binding 都使用当前 DataContext 作为其源。所以当你设置
DataContext="{Binding BaseModuleViewModel}"
BaseViewModel
应该是 current DataContext 的属性,然后将其更改为该属性的值,因此您将获得一个 new DataContext。应该清楚的是,这也有影响
Content="{Binding BaseModuleView}"
因为
BaseModuleView
也应该是当前 DataContext 的属性。
除此之外,您似乎有这样的印象:ContentControl 的
Content
必须保存视图引用,而 DataContext
保存对视图模型的引用。这是一种误解。在典型的 WPF 应用程序中,视图由应用于 ContentControls 或 ContentPresenters 的 DataTemplates 创建。当这些 DataTemplate 的 DataType 与分配给 Content
属性的视图模型类型匹配时,可以自动应用这些 DataTemplate。
有关更多信息,请参阅数据模板概述。