2013-03-04 7 views
1

я определяю следующий стиль в XAML:DataBinding внутри ContentTemplate внутри стиля в Silverlight

<Style TargetType="telerik:RadDiagramShape" x:Key="styleShapeBase"> 
    <Setter Property="Width" Value="120" /> 
    <Setter Property="Height" Value="60" /> 
    <Setter Property="IsResizingEnabled" Value="False" /> 
    <Setter Property="ContentTemplate"> 
     <Setter.Value> 
      <DataTemplate> 
       <TextBlock x:Name="lblName" Text="{Binding Name}" /> 
      </DataTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Затем в коде-за я назначая контекст данных. Я хочу нарисовать фигуру с некоторым текстом в ней, который исходит от объекта (если это в конечном итоге работает, я собираюсь разместить там дополнительную информацию). Я делаю это так:

var shape = new RadDiagramShape(); 
shape.Style = (Style)Resources["styleShapeBase"]; 
shape.DataContext = item.DataContext; 

Где item простой ПОКО, который имеет Name свойство типа string (эта часть работы, я проследил его, то есть DataContext правильно назначен).

Но привязка данных никогда не возникает. Это по дизайну (т. Е. Нет привязки данных внутри шаблона контента), если не так? Спасибо,

+0

Попробуйте вместо этого использовать TemplateBinding. Вот пример: http://stackoverflow.com/questions/1877047/silverlight-templatebinding-a-rectangle – KodeKreachor

+0

TemplateBinding работает только в теле шаблона управления, поэтому здесь не уместно. –

ответ

2

Вы можете использовать Bindings в своих DataTemplates. В этом случае привязка будет искать свойство Name в том, что вы установили в качестве содержимого вашего RadDiagramShape.

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

Если это все еще не работает, можете ли вы разместить информацию о том, как вы устанавливаете стиль и содержание каждого экземпляра RadDiagramShape и объекта, к которому вы пытаетесь привязать?


Где-то в шаблоне управления для класса RadDiagramShape, будет ContentPresenter с ContentTemplate привязанного к одному вы определили. Проблема заключается в том, что ContentTemplate используется, только если свойство Content также установлено. В противном случае в этот ContentPresenter ничего не будет загружено.

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

This is a good place to start understanding what the DataContext property is

+0

Спасибо, что подтвердили, что он должен работать. См. Править. – Jeff

+0

ОК, поэтому мне даже не нужно устанавливать свойство DataContext? Это подразумевается при настройке Контента? – Jeff

+0

Вам не нужно устанавливать DataContext, если вы не хотите определять контент посредством привязки данных. Содержимое всегда должно быть установлено. –

Смежные вопросы