WPF - Content 和 DataContext 可以同时通过 Binding 工作吗?

问题描述 投票:0回答:1

我正在使用 (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 则不起作用。

如果您有任何想法或建议让我尝试,那将会很有帮助

谢谢

wpf data-binding
1个回答
0
投票

任何未显式指定源对象的 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。

有关更多信息,请参阅数据模板概述

© www.soinside.com 2019 - 2024. All rights reserved.