将自定义类绑定到自定义类的列表框

时间:2011-12-21 19:24:09

标签: windows-phone-7 data-binding binding windows-phone-7.1

我有这些课程:

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);
}

并在页面I中绑定属性如下:

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

一切正常(流派和其他)。其他一切都是字符串。但是对于演员我想要在列表名称中绑定,并在点击演员之后我想去网址。如何从actor绑定name属性?感谢

2 个答案:

答案 0 :(得分:1)

首先,您需要在OnSelectedItemChanged上创建ListBox活动,以处理Actors的点击次数。

然后你需要获得你点击的项目。您可以通过多种方式完成此操作。最简单的方法是listBox.SelectedItem属性。

然后您可以使用(listBox.SelectedItem as Actor).Url

获取您的网址

此外,当您从详细信息页面返回时,SelectedItem将不为空,并在第二次单击同一项未触发事件。因此,在处理点击时将SelectedItem设置为null

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>

答案 1 :(得分:0)

您可以覆盖Actor类中的ToString()方法以显示友好的内容,例如名称。

    public override string ToString()
    {
        return Name;
    }

将对象绑定到组合框和下拉列表时,这很有用。