I have this brief code snippet below that tries to bind the DataContext of a TilePane at runtime. When the TilePane is maximized, however, the text does not show. Can anyone point out the problem in the code?
<UserControl x:Class="ResultsViewer.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:igChart="clr-namespace:Infragistics.Silverlight.Chart;assembly=Infragistics.Silverlight.Chart.v9.2">
<UserControl.Resources>
<DataTemplate x:Key="Comment">
<StackPanel>
<TextBlock Text="Comment"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="CommentHeader">
<TextBlock Text="Comment Header"/>
<DataTemplate x:Key="CommentMaximized">
<TextBlock Text="{Binding Comment}"/>
</UserControl.Resources>
<igTV:XamWebTileView RowsInPage="3" ColumnsInPage="3" x:Name="xamWebTileView" MaximizedStateChanging="XamWebTileView_MaximizedStateChanging">
</igTV:XamWebTileView>
</UserControl>
public partial class MainPage : UserControl
{
public MainPage()
InitializeComponent();
this.Loaded += new RoutedEventHandler(TileViewBindingViewModel_Loaded);
}
void TileViewBindingViewModel_Loaded(object sender, RoutedEventArgs e)
TilePane comment = new TilePane {
ContentTemplate = this.Resources["Comment"] as DataTemplate,
HeaderTemplate = this.Resources["CommentHeader"] as DataTemplate,
DataContext = new { Comment = "Test" },
};
this.xamWebTileView.Items.Add(comment);
void XamWebTileView_MaximizedStateChanging(object sender, TileStateChangingEventArgs e)
TilePane pane = e.Element as TilePane;
if (pane == null)
return;
switch(e.NewState)
case TileState.Normal:
pane.ContentTemplate = this.Resources["Comment"] as DataTemplate;
break;
case TileState.Minimized:
case TileState.Maximized:
pane.ContentTemplate = this.Resources["CommentMaximized"] as DataTemplate;
default:
Hi,There are two problems in the code.1. Anonymous typeYou attempt to data bind to an anonymous type but anonymous Types are defined internal to the assembly that they are used in. 2. ContentControl and ContentTemplateTilePane is a ContentControl and the ContentTemplate property is related to the Content property, not to the DataContext.Everything works fine if we use some public type (Point for example) and set the Content like in this sample:<DataTemplate x:Key="Comment"> <StackPanel> <TextBlock Text="{Binding X}"/> </StackPanel></DataTemplate><DataTemplate x:Key="CommentMaximized"> <StackPanel> <TextBlock Text="{Binding Y}"/> </StackPanel></DataTemplate>void TileViewBindingViewModel_Loaded(object sender, RoutedEventArgs e){ TilePane comment = new TilePane { ContentTemplate = this.Resources["Comment"] as DataTemplate, HeaderTemplate = this.Resources["CommentHeader"] as DataTemplate, DataContext = new Point(1000, 2000), }; comment.SetBinding(TilePane.ContentProperty, new Binding()); this.xamWebTileView.Items.Add(comment);}Regards,Marin