我正在使用 (MainViewModel.cs) 中的类属性在运行时在 MainView.xaml 页面中加载视图和 ViewModel。
如果我仅绑定内容,视图会加载,但我使用 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}”)然后它就可以工作 我尝试仅绑定 ViewModel ( DataContext = "{Binding BaseViewModel} )" 它有效
但是如果对 Context 和 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。
有关更多信息,请参阅数据模板概述。