我有我的小設計器工具(我的程序)。以編程方式設置DataTemplate時的WPF/Silverlight綁定
左側有TreeView,右側有手風琴。
當我選擇一個節點時,我想根據選定節點的DataContext中的屬性動態構建Accordion Items。
選擇節點工作正常,當我使用這個示例代碼進行測試時,它也可以工作。
XAML代碼:
<layoutToolkit:Accordion x:Name="accPanel"
SelectionMode="ZeroOrMore"
SelectionSequence="Simultaneous">
<layoutToolkit:AccordionItem Header="Controller Info">
<StackPanel Orientation="Horizontal" DataContext="{Binding}">
<TextBlock Text="Content:" />
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</layoutToolkit:AccordionItem>
</layoutToolkit:Accordion>
C#代碼:
private void treeSceneNode_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (e.NewValue != e.OldValue)
{
if (e.NewValue is SceneNode)
{
accPanel.DataContext = e.NewValue; //e.NewValue is a class that contains Name property
}
}
}
但是,當我試圖實現這一目標使用DateTemplate和動態地構建AccordingItem出現的問題,結合不工作:
<layoutToolkit:Accordion x:Name="accPanel"
SelectionMode="ZeroOrMore"
SelectionSequence="Simultaneous" />
and DataTemplate in my ResourceDictionary
<DataTemplate x:Key="dtSceneNodeContent">
<StackPanel Orientation="Horizontal" DataContext="{Binding}">
<TextBlock Text="Content:" />
<TextBlock Text="{Binding Path=Name}" />
</StackPanel>
</DataTemplate>
和C#代碼:
private void treeSceneNode_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
if (e.NewValue != e.OldValue)
{
ResourceDictionary rd = new ResourceDictionary();
rd.Source = new Uri("/SilverGL.GUI;component/SilverGLDesignerResourceDictionary.xaml", UriKind.RelativeOrAbsolute);
if (e.NewValue is SceneNode)
{
accPanel.DataContext = e.NewValue;
AccordionItem accController = new AccordionItem();
accController.Header = "Controller Info";
accController.ContentTemplate = rd["dtSceneNodeContent"] as DataTemplate;
accPanel.Items.Add(accController);
}
else
{
// Other type of node
}
}
}
你能否展開「不工作」 - 異常,不正確的結果,什麼都沒有發生?你看到輸出窗口中有任何綁定錯誤嗎? – itowlson 2010-03-28 21:16:41
Hello itowlson, 輸出中沒有任何異常或錯誤。 簡單地說,第一個「正確的」「靜態」示例顯示了「內容:場景根節點」,其中「場景根節點」來自名稱屬性。 第二個「錯誤」,「動態」示例僅向我顯示「內容:」。 而我不知道問題出在哪裏。 是的,我檢查了輸出窗口,沒有任何東西。 – 2010-03-28 21:34:26