Привязка пользовательского класса к списку из пользовательского класса - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть эти классы:

public class MovieExt
{
        public string Title { get; set; }
        public string Year { get; set; }
        public List<string> Genres { get; set; }
        public List<Actor> Actors { get; set; }
        ....
}

public class Actor
{
    public string Name { get; set; }
    public string Birth { get; set; }
    public string Biography { get; set; }
    public string Url { get; set; }

}

, и это мой метод на моей странице:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{

    object obj;
    if (PhoneApplicationService.Current.State.TryGetValue("movie", out obj))
    {
        MovieExt movie = (MovieExt)obj;
        this.DataContext = movie;
        this.imgPoster.Source = new BitmapImage(new Uri(movie.PosterUrl, UriKind.Absolute));
    }
    base.OnNavigatedTo(e);
}

и на странице я привязываю свойства, подобные этому:

<ListBox Grid.Row="4" Grid.Column="1" 
                             Margin="5,5,5,5"
                             ItemsSource="{Binding Path=Actors }"
                             x:Name="listStars"/>

Для всего, что работает (жанры и другие).Все остальное - строка.Но для актеров я хочу связать имя в списке и после нажатия на актера я хочу перейти на URL.Как я могу связать имя свойства от актера?Спасибо

Ответы [ 2 ]

1 голос
/ 21 декабря 2011

Прежде всего, вам нужно создать OnSelectedItemChanged событие на вашем ListBox для обработки кликов на вашем Actors.

Тогда вам нужно получить выбранный вами предмет. Вы можете сделать это несколькими способами. Самый простой способ - это свойство listBox.SelectedItem.

И тогда вы можете получить свой URL с (listBox.SelectedItem as Actor).Url

Кроме того, когда вы вернетесь со страницы сведений, SelectedItem будет не нулевым и во второй раз щелкните по событию, которое не было запущено. Итак, установите SelectedItem в ноль при обработке клика

UPD : чтобы правильно связать Actor класс с ListBox, вам нужно создать ItemTemplate:

 <ListBox ...>
      <ListBox.ItemTemplate>
           <DataTemplate>
                <StackPanel>
                     <TextBlock Text={Binding Name} />
                     <TextBlock Text={Binding Birth} />
                     <TextBlock Text={Binding Biography} />
                     <TextBlock Text={Binding Url} />
                </StackPanel>
           </DataTemplate>
      </ListBox.ItemTemplate>
 </ListBox>
0 голосов
/ 22 декабря 2011

Вы можете переопределить метод ToString() в классе Actor, чтобы отобразить что-то дружелюбное, например, имя.

    public override string ToString()
    {
        return Name;
    }

Это полезно при привязке объектов к выпадающим спискам и выпадающим спискам.

...