У меня есть класс, как это:XAML: Привязка к одному ребенку в коллекции
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) связать StackPane
l с номером ContestTeam
в коллекции Teams
, который соответствует значению ScheduleViewModel.TeamId
?
Мой последний регресса будет просто использовать Loaded
событие StackPanel
установить его в код-за DataContext
, но я хотел бы избежать этого. Есть ли какие-нибудь XAML ниндзя, которые могут помочь мне понять это?
Вы можете создать 'IValueConverter' который происходит от 'DependencyObject' и имеет некоторый' DependencyProperty', который содержит 'Id' для' Silverlight'. – Mohsen