2010-10-15 94 views
0

我正在創建附加屬性。我附加的班級是helper:FocusDetail,有2個屬性。第二個屬性DetailBody類型是對象。我使用這個屬性上的項目控制xaml中的附加屬性聲明

<ItemsControl ItemsSource="{Binding Riches}" BorderThickness="0"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
     <TextBox Text="{Binding TextInfo}" 
      helper:FocusDetail.DetailTitle="{StaticResource strTitle}" 
      helper:FocusDetail.DetailBody="{Binding Description}" 
      /> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

已成功工作

我改變了這樣的

<DataTemplate> 
    <TextBox Text="{Binding TextInfo}" 
     helper:FocusDetail.DetailTitle="{StaticResource strTitle}"> 
     <helper:FocusDetail.DetailBody> 
      <Binding Path="Description"/> 
     </helper:FocusDetail.DetailBody> 
    </TextBox> 
</DataTemplate> 

也就是說工作 我又改變

附加價值
<DataTemplate> 
    <TextBox Text="{Binding TextInfo}" 
     helper:FocusDetail.DetailTitle="{StaticResource strTitle}" 
     > 
     <helper:FocusDetail.DetailBody> 
      <TextBlock Text="Some static text"></TextBlock> 
     </helper:FocusDetail.DetailBody> 
    </TextBox> 

這是工作。我的最後一個變化是在這裏

<DataTemplate> 
    <TextBox Text="{Binding TextInfo}" 
     helper:FocusDetail.DetailTitle="{StaticResource strTitle}"> 
     <helper:FocusDetail.DetailBody> 
      <TextBlock Text="{Binding Description}"></TextBlock> 
     </helper:FocusDetail.DetailBody> 
    </TextBox> 
</DataTemplate> 

這是行不通的。文本塊是空的。

我改變

<TextBlock Text="{Binding Description}"></TextBlock>

<TextBlock Text="{Binding }"></TextBlock>

但textblock返回Window DataContext類型。已經退出Itemscontrol迭代。

爲什麼綁定錯誤工作?

如何聲明像上次代碼一樣的附屬屬性?

我需要附加屬性包含可視化樹控件。

回答

1

您的綁定正在打破,因爲它依賴於繼承的DataContext,但是通過將其分配給(非內容)屬性而從FrameworkElement DataContext繼承結構中取出。

從看起來你想要做的最好的解決方案可能會改爲使用DataTemplate來定義你的UI元素(這裏是TextBlock),並有一個單獨的屬性爲數據本身,然後可以應用在預期顯示視覺效果的樹中的點處使用ContentControl或ContentPresenter創建模板(我假設這是爲了驅動某種工具提示/彈出窗口)。

 <TextBox Text="{Binding TextInfo}" 
     helper:FocusDetail.DetailTitle="{StaticResource strTitle}" 
     helper:FocusDetail.DetailBody="{Binding}" 
     > 
     <helper:FocusDetail.DetailBodyTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Description}"></TextBlock> 
      </DataTemplate> 
     </helper:FocusDetail.DetailBodyTemplate> 
    </TextBox>