WPF MVVM绑定到Parent ListBox的DataTemplate中的ListBox的SelectedItem

时间:2013-12-22 21:17:24

标签: wpf mvvm listbox selecteditem

我在另一个ListBox的DataTemplate中有一个ListBox,简化为以下XAML

<ListBox ItemsSource="{Binding MovieList}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <ListBox ItemsSource="{Binding Cast}" 
                         DisplayMemberPath="Name"
                         SelectedItem="{Binding SelectedCastMember, Mode=TwoWay}"/>
                <TextBlock Text="{Binding MovieName}"/>
                <TextBlock Text=....../>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

父列表绑定到电影的ObservableCollection,每个Movie对象依次具有绑定到列表框的演员成员的ObservableCollection。 ViewModel属性和下面的Class

public const string MovieListPropertyName = "MovieList";

    private ObservableCollection<Movie> _movieList;

    public ObservableCollection<Movie> MovieList
    {
        get
        {
            return _movieList;
        }

        set
        {
            if (_movieList == value)
            {
                return;
            }

            RaisePropertyChanging(MovieListPropertyName);
            _movieList = value;
            RaisePropertyChanged(MovieListPropertyName);
        }
    }

public const string SelectedCastMemberPropertyName = "SelectedCastMember";

    private MovieCastMember _selectedCastMember;

    public MovieCastMember SelectedCastMember
    {
        get
        {
            return _selectedCastMember;
        }

        set
        {
            if (_selectedCastMember == value)
            {
                return;
            }

            RaisePropertyChanging(SelectedCastMemberPropertyName);
            _selectedCastMember = value;
            RaisePropertyChanged(SelectedCastMemberPropertyName);
        }
    }

使用Movie和MovieCastMember类如下

    public class Movie
    {                    
        public int Id { get; set; }
        public string Name { get; set; }
        public int Year { get; set; }
        public string Overview { get; set; }
        public double VoteAverage { get; set; }
        public ObservableCollection<MovieCastMember> Cast { get; set; }
        public BitmapImage PosterImage { get; set; }       
    }

    public class MovieCastMember
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }

我想在任何电影列表中选择演员,并将MovieCastMember对象绑定到我的ViewModel中的属性。我的列表框填充得很好,我在XAML中尝试了各种场景,但是SelectedItem没有更新ViewModel中的属性。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

那是因为你在第二个listBox中绑定了Movie类。没有“SelectedCastMember”。将它移动到Movie类,它将起作用。