Grid を使用する ItemContainer を持つカスタム ListBox を作成しています。目標は、各アイテムを特定の列、行に追加し、特定の行スパンを持つことです。これらの数値は、ObservableCollection ScheduledCourses でバインド可能なプロパティとして設定されます。DataTemplate では、DataType を指定して、コレクション内からバインドできます。しかし、Style で DataType を指定することはできません。BlockPlacement の値を設定して目的のプロパティをバインドするにはどうすればよいですか?
PS。MVVM Light を使用しています。
<UserControl.Resources>
<vm:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
<CollectionViewSource x:Key="CoursesByDay" Source="{Binding ScheduledCourses}">
<CollectionViewSource.GroupDescriptions>
<PropertyGroupDescription PropertyName="MeetsOn" />
</CollectionViewSource.GroupDescriptions>
</CollectionViewSource>
<DataTemplate x:Key="ScheduleBlock" DataType="vm:ScheduleBlockViewModel">
<userControls:ScheduleBlock />
</DataTemplate>
<ItemsPanelTemplate x:Key="ScheduleDayGrid">
<!-- Replace with Schedule Day Grid -->
<Grid Name="ScheduleDayGrid"
Width="400"
Initialized="ScheduleDayGridInitialized"
ShowGridLines="True" />
</ItemsPanelTemplate>
<Style x:Key="BlockPlacement" TargetType="ListBoxItem">
<Setter Property="Grid.Column" Value="{Binding Path=ScheduledCourses[].TimeSlotIndex}" />
<Setter Property="Grid.Row" Value="{Binding ScheduledCourses[].StartTimeIndex}" />
<Setter Property="Grid.RowSpan" Value="{Binding ScheduledCourses[].DurationIndex}" />
<Setter Property="VerticalContentAlignment" Value="Top" />
<Setter Property="Grid.VerticalAlignment" Value="Stretch" />
</Style>
</UserControl.Resources>
<UserControl.DataContext>
<Binding Mode="OneWay"
Path="ScheduleGrid"
Source="{StaticResource Locator}" />
</UserControl.DataContext>