更改ItemSource后重新评估ListView的SelectedItem

时间:2014-09-16 21:40:36

标签: wpf listview data-binding selecteditem

我有一个ListView,我希望在收到新的SelectedItem后重新评估其ItemSource。这样做的目的是“记住”用户是否已选择ListView中的项目。

XAML:

<ListView 
    x:Name="_matchingTvShowsFromOnlineDatabaseListView" 
    Grid.Row="0" 
    Grid.Column="0"
    Grid.RowSpan="3"
    ItemsSource="{Binding AvailableMatchingTvShows}"
    SelectedItem="{Binding AcceptedMatchingTvShow, Mode=TwoWay}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Name}"/>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

SelectedItem也绑定到我的VM上的属性。

VM:

public IWebApiTvShow AcceptedMatchingTvShow
{
    get
    {
        IWebApiTvShow acceptedTvShow = null;
        if (FoundTvShows.Count > 0)
        {
            var tvShowName = FoundTvShows[CurrentTvShow];
            acceptedTvShow = AvailableTvShowMatches[tvShowName].FirstOrDefault(webApiTvShow => webApiTvShow.Accepted);
        }
        return acceptedTvShow;
    }
    set
    {
        if (value != null)
        {
            var tvShowName = FoundTvShows[CurrentTvShow];
            var currentlyAcceptedTvShow =
                AvailableTvShowMatches[tvShowName].FirstOrDefault(webApiTvShow => webApiTvShow.Accepted);
            if (currentlyAcceptedTvShow != null)
            {
                currentlyAcceptedTvShow.Accepted = false;
            }
            value.Accepted = true;
        }
        OnPropertyChanged();
    }
}

我为我正在构建的应用程序制作了一个屏幕截图,希望能够清楚地表明我想要实现的目标。

enter image description here

这个想法是当用户浏览电视节目时,应用程序会记住相关的电视节目。

目前,当我关联电视节目并导航到下一个电视节目并再次返回时,没有选择任何内容(设置新AcceptedMatchingTvShow后,未执行属性ItemSource的获取者)

更新:

添加了AvailableMatchingTvShows

的代码
private ObservableCollection<IWebApiTvShow> _availableMatchingTvShows;
public ObservableCollection<IWebApiTvShow> AvailableMatchingTvShows
{
    get { return _availableMatchingTvShows; } 
    set
    {
        _availableMatchingTvShows = value;
        OnPropertyChanged("AcceptedMatchingTvShow");
    }
}

1 个答案:

答案 0 :(得分:1)

在没有看到所有ViewModel的情况下,我猜测当ItemsSource绑定发生更改时会引发PropertyChanged(&#34; AcceptedMatchingTvShow&#34;),这会更新SelectedItem绑定。

相关问题