2016-07-05 19 views
2

我有一个绑定到父元素。如何在绑定中为DataContext提供数据类型,因此intellisense可以解析绑定的属性?绑定工作正常,但intellisense说:无法解析类型'对象'的数据上下文中的属性XXX

绑定在运行时正常工作。因此,我有以下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带下划线)。

我已经尝试过使用设计时数据上下文定义“d:DataContext的”在Button元素中,像这样:

d:DataContext="{d:DesignInstance viewModels:ConnectionInfosVM}" 

但这并不改变智能感知警告。

我也尝试将DataTemplate上的DataType定义为“viewModels:ConnectionInfosVM”,就像我为内容模板做的那样,但是这也不会改变智能感知警告(我猜会错误的,因为元素的数据类型实际上是一个TabItem)。

另一种尝试是通过添加定义的DataContext以下的Button元素定义:

<Button.DataContext> 
    <viewModels:ConnectionInfosVM/> 
</Button.DataContext> 

但是,这也并不摆脱警告。

+0

VM是否在设计时间内为要绑定的项目生成数据? – OmegaMan

+0

不,在设计时这个TabControl没有数据。它稍后基于网络通信而被填充。 – ptair

+0

如果您删除按钮的内容,智能感应故障是否仍然发生?目前还不清楚错误发生在哪里......如果你可以缩小到命令或内容,这可能是说。你也使用哪个版本的视觉工作室?你有没有尝试过最新的Blend版本,同样的事情发生了吗? – OmegaMan

回答

1

我发现了一个解决方案,至少对于上述问题。我在代码隐藏中设置了问题窗口的DataContext。我的示例中的TabControl只是继承DataContext,它是一个ConnectionInfosVM。

为了解决这些警告(当然在通过定位器提供DataContext将获得灵活的),我在XAML中定义的DataContext像这样:

<UserControl ... 
      DataContext="{Binding Source={StaticResource mainViewModelLocator}, Path=ConnectionInfosVM}"> 

看来,智能感知现在能解决这些参考。但在另一侧,我也改变了DataTemplate内含有以下的TextBlock

<TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type TabItem}}, Path=DataContext.Address}" /> 

现在的这种TabItem实际上是一种不同的类型,因为它是为背衬的对象的类型的DataContextTabItem。因此,在这种情况下,无法通过intellisense找到Property地址。

那么,问题类型仍然存在,是否有可能在DataTemplate中定义的绑定中定义DataContext的类型?

相关问题