2016-07-05 39 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的類型?

相關問題