当我使用 GridView 控件为我的应用程序开发启动屏幕时,我遇到了一个问题。我的主屏幕上有一个 GridView,它的 CollectionViewSource 设置为 ItemSource。
对于此 CollectionViewSource,源设置为 ObservableCollection 列表。每个 GroupViewModel 中都有一个 ObservableCollection。在代码中,重要部分如下所示:
public class StartPageViewModel : ViewModelBase
{
public ObservableCollection<GroupViewModel> Groups { get; set; }
public CollectionViewSource GroupsCvs { get; set; }
public StartPageViewModel()
{
// fill Groups with some mock data
GroupsCvs.Source = Groups;
GroupsCvs.IsSourceGrouped = true;
}
public void MoveItems(GroupViewModel grp)
{
// add a dummy item
grp.AddRecipe(new ItemViewModel(new Item()) { Id = "123" });
RaisePropertyChanged("GroupsCvs");
RaisePropertyChanged("Groups");
}
}
public class GroupViewModel : ViewModelBase, IEnumerable<ItemViewModel>
{
public ObservableCollection<ItemViewModel> Items { get; set; }
}
View:
public sealed partial class MainPage : LayoutAwarePage
{
private ViewModelLocator locator = new ViewModelLocator();
public MainPage()
{
this.InitializeComponent();
this.DataContext = locator.Main; // returns StartPageViewModel
}
}
XAML part for MainPage, GridView
<GridView ItemsSource="{Binding GroupsCvs.View}" ...
</GridView>
当我将项目添加到组的集合时,如何刷新 UI?在我的 StartPageViewModel 中,我将虚拟项目添加到 GroupViewModel 并引发 propertychanged,但 Grid 保持不变。
我还尝试在 GroupViewModel 类中触发属性更改事件,当 Items 集合更改时没有任何运气。
编辑:正如我在评论中所写的,可以通过重新分配源属性来刷新,但是这会使 GridView 再次呈现,这并不好。我正在寻找能够带来更好用户体验的选项。