【问题标题】:Re-evaluate a ListView's SelectedItem after changing ItemSource更改 ItemSource 后重新评估 ListView 的 SelectedItem
【发布时间】:2014-11-10 19:11:10
【问题描述】:

我有一个ListView,一旦它收到一个新的ItemSource,我想重新评估它的SelectedItem。这样做的目的是“记住”用户是否已经在 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 上的一个属性。

虚拟机:

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

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

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

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

更新:

添加AvailableMatchingTvShows的代码

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

【问题讨论】:

  • 可以发AvailableMatchingTvShows相关的代码吗?

标签: wpf listview data-binding selecteditem


【解决方案1】:

没有看到你所有的 ViewModel,我猜你是否在 ItemsSource 绑定发生变化时引发 PropertyChanged("AcceptedMatchingTvShow") 会更新 SelectedItem 绑定。

【讨论】:

  • 对!有时解决方案可以如此简单。非常感谢!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多