我有一个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();
}
}
我为我正在构建的应用程序制作了一个屏幕截图,希望能够清楚地表明我想要实现的目标。
这个想法是当用户浏览电视节目时,应用程序会记住相关的电视节目。
目前,当我关联电视节目并导航到下一个电视节目并再次返回时,没有选择任何内容(设置新AcceptedMatchingTvShow
后,未执行属性ItemSource
的获取者)
更新:
添加了AvailableMatchingTvShows
private ObservableCollection<IWebApiTvShow> _availableMatchingTvShows;
public ObservableCollection<IWebApiTvShow> AvailableMatchingTvShows
{
get { return _availableMatchingTvShows; }
set
{
_availableMatchingTvShows = value;
OnPropertyChanged("AcceptedMatchingTvShow");
}
}
答案 0 :(得分:1)
在没有看到所有ViewModel的情况下,我猜测当ItemsSource绑定发生更改时会引发PropertyChanged(&#34; AcceptedMatchingTvShow&#34;),这会更新SelectedItem绑定。