【发布时间】:2016-11-07 05:39:33
【问题描述】:
我绑定了一个父元素。如何在绑定中为 DataContext 提供数据类型,以便智能感知可以解析绑定的属性?
绑定在运行时工作正常。所以,我有以下 XAML 结构:
<TabControl Name="TabDynamic"
ItemsSource="{Binding TabItems, Mode=OneWay}" ...>
<TabControl.Resources>
<DataTemplate x:Key="TabHeader" DataType="TabItem">
<DockPanel>
<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=Header}" />
<Button Command="{Binding ElementName=TabDynamic, Path=DataContext.DeleteTabCommand}"
CommandParameter="{Binding ElementName=TabDynamic, Path=DataContext.TabItems/}">
<Image Source="{DynamicResource DeleteImg}" Height="11" Width="11"></Image>
</Button>
</DockPanel>
</DataTemplate>
<DataTemplate x:Key="TabContent" DataType="viewModels:ConnectionInfoVM">
<views:BufferViewerControl/>
</DataTemplate>
</TabControl.Resources>
</TabControl>
DataContext 的数据类型是“viewModels:ConnectionInfoVM”。 Intellisense 现在将在 DataContext 上的两个属性下划线(因此 DeleteTabCommand 和 TabItems 都带有下划线)。
我已经尝试在 Button 元素中使用设计时数据上下文定义“d:DataContext”,如下所示:
d:DataContext="{d:DesignInstance viewModels:ConnectionInfosVM}"
但这不会改变智能感知警告。
我还尝试将 DataTemplate 上的 DataType 定义为“viewModels:ConnectionInfosVM”,就像我为内容模板所做的那样,但这也不会改变智能感知警告(我猜是错误的,因为数据元素的类型确实是 TabItem)。
另一个尝试是通过将以下内容添加到 Button 元素定义来定义 DataContext:
<Button.DataContext>
<viewModels:ConnectionInfosVM/>
</Button.DataContext>
但这也不能消除警告。
【问题讨论】:
-
VM 是否在设计时为要绑定的项目生成数据?
-
不,在设计时还没有此 TabControl 的数据。稍后会根据网络通信填充它。
-
如果您删除按钮的内容,智能感知失败是否仍然发生?目前尚不清楚错误发生在哪里......如果您可以将其缩小到命令或内容,那可能会说明问题。另外,您使用的是哪个版本的 Visual Studio?您是否尝试过最新的 Blend 版本,是否会出现同样的情况?
-
我使用 VS 15,但我不使用 Blend。
标签: c# wpf data-binding datacontext