2013-03-04 103 views
1

我定義在XAML如下風格樣式裏面的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是一個簡單的POCO擁有stringName屬性(這部分的工作,我已經追查,即DataContext的正確分配)。

但從未出現數據綁定。它是否由設計(即內容模板內沒有數據綁定),如果不是什麼問題?謝謝,

+0

嘗試使用TemplateBinding代替。下面是一個示例:http://stackoverflow.com/questions/1877047/silverlight-templatebinding-a-rectangle – KodeKreachor 2013-03-04 17:19:28

+0

TemplateBinding僅在控件模板的正文中起作用,因此在此處不相關。 – 2013-03-04 19:40:34

回答

2

您可以在DataTemplates中使用綁定。在這種情況下,綁定會根據您設置的RadDiagramShape的內容來查找Name屬性。

你應該確保你的類有這個屬性,並且它是一個字符串。

如果仍然不起作用,您可以發佈如何設置RadDiagramShape的每個實例的風格和內容以及您試圖綁定到的對象的詳細信息?


某處在控制模板中的RadDiagramShape類,將有與它的ContentTemplate必然定義了一個ContentPresenter。問題在於ContentTemplate僅在內容屬性也被設置的情況下使用。否則,將無法將任何內容加載到該ContentPresenter中。

要做到這一點,您必須在此元素的實例上設置Content屬性。

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

+0

感謝您確認它應該工作。請參閱編輯。 – Jeff 2013-03-04 18:28:32

+0

好的,所以我甚至不必設置DataContext屬性?設置內容時隱含着什麼? – Jeff 2013-03-04 19:58:09

+0

除非要通過數據綁定定義內容,否則不必設置DataContext。內容必須始終設置。 – 2013-03-04 21:22:36