2010-10-15 4 views
0

Я создаю прикрепленное свойство. Мой прикрепленный класс helper:FocusDetail и имеет 2 объекта недвижимости. второе имущество DetailBody type - объект. Я использую это свойство на элементы управленияЗаявленная декларация собственности в 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>.

Но текстовый блок возвращает тип окна DataContext. Уже вышло из итерации Itemscontrol.

Почему Binding неправильно работает?

Как объявить прикрепленное свойство, как последний код?

Мне нужно, чтобы прикрепленное свойство содержало визуальные элементы управления деревом.

ответ

1

Ваше связывание ломается, потому что оно зависит от унаследованного DataContext, но выводится из структуры наследования FrameworkElement DataContext, присваивается свойству (не Content).

Из-за того, что вы пытаетесь сделать лучшее решение, вероятно, вместо этого следует использовать DataTemplate для определения элементов пользовательского интерфейса (здесь 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>