2010-10-15 63 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>