Windows Phone でアプリを開発しています。ビューでは、リストボックスを使用したグリッドがあります:
<Grid x:Name="ContentGrid"
Grid.Row="1">
<ListBox x:Name="TestListbox"
ItemsSource="{Binding History}"
Margin="24,0"
SelectionChanged="GoToSelection"
ItemTemplate="{StaticResource HistoryDataTemplate}"
>
</ListBox>
</Grid>
履歴は ObservableCollection です。
HistoryDataTemplate は次のようになります。
<phone:PhoneApplicationPage.Resources>
<DataTemplate x:Key="HistoryDataTemplate">
<Grid>
<HistoryControls:HistoryItem d:LayoutOverrides="Width" Margin="0,0,0,24"/>
</Grid>
</DataTemplate>
</phone:PhoneApplicationPage.Resources>
PropertyChanged イベントをサブスクライブするために、HistoryItem のコンストラクターを使用します。
public HistoryItem()
{
InitializeComponent();
base.Loaded+=(new RoutedEventHandler(this.HistoryControl_Loaded));
}
private void HistoryControl_Loaded(object sender, RoutedEventArgs e)
{
this._dataContext.PropertyChanged += new PropertyChangedEventHandler(this._dataContext_PropertyChanged);
}
1〜8個のアイテムがある場合はすべて正常に動作しますが、8個以上のアイテムの場合、コンストラクターは8回しか呼び出されません。