Eu tenho uma classe como este:
public class Contest {
List<ContestTeam> Teams { get; set; }
}
public class ContestTeam {
int TeamId { get; set; }
int FinalScore { get; set; }
}
E o meu modelo de vista se parece com isso:
public class ScheduleViewModel {
int CurrentTeamId { get; }
List<Contest> Schedule { get; }
}
Meu XAML é algo como isto:
<ListBox ItemsSource={Binding Path=Schedule}>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<StackPanel Grid.Row=0 Orientation=Horizontal>
<!-- TODO: DataContext is currently hard coded to 425 - this needs to be fixed -->
<StackPanel Orientation=Horizontal
DataContext={Binding Path=Teams, Converter={StaticResource CurrentTeam}, ConverterParameter=425}>
<TextBlock Text={Binding SomeProperty} />
</StackPanel>
<Button Content=Delete />
</StackPanel>
<ListBox Grid.Row=1 ItemsSource={Binding Teams}>
<!-- a list of all the teams -->
</ListBox>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Essencialmente, de modo que pode continuar a desenvolver Criei um conversor de valor (CurrentTeam) e codificado o TeamId
como o ConverterParameter
modo I podem continuar a desenvolver a vista. Mas eu estou em um pouco de um impasse. Existe uma maneira (usando XAML) para vincular o DataContext
do StackPane
l do ContestTeam
na Teams
coleção que corresponda ao valor de ScheduleViewModel.TeamId
?
Meu último recurso será usar apenas o Loaded
caso de StackPanel
configurá-lo é DataContext
no código-behind, mas eu gostaria de evitar isso. Há algum Ninjas XAML lá fora que pode me ajudar a descobrir isso?