У меня есть такой класс:
public class Contest {
List<ContestTeam> Teams { get; set; }
}
public class ContestTeam {
int TeamId { get; set; }
int FinalScore { get; set; }
}
И моя модель зрения выглядит так:
public class ScheduleViewModel {
int CurrentTeamId { get; }
List<Contest> Schedule { get; }
}
Мой XAML выглядит примерно так:
<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>
По сути, чтобы я мог продолжить разработку, я создал преобразователь значений (CurrentTeam) и жестко закодировал TeamId
как ConverterParameter
, чтобы я мог продолжить разработку представления. Но я в тупике. Есть ли способ (с использованием XAML) связать DataContext
из StackPane
l с ContestTeam
в коллекции Teams
, которая соответствует значению ScheduleViewModel.TeamId
?
Моим последним выходом будет просто использовать Loaded
событие StackPanel
, чтобы установить его DataContext
в коде, но я бы хотел этого избежать. Есть ли там ниндзя XAML, которые могут помочь мне понять это?