當我使用GridView控件爲我的應用程序開發啓動屏幕時,遇到問題。我的主屏幕上有一個GridView,它的CollectionViewSource被設置爲ItemSource。將項目添加到嵌套列表後更新GridView
對於此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中添加了虛擬物品,並且提升了屬性changed,但網格保持不變。
我也嘗試在GroupViewModel類中觸發屬性更改的事件,當Items集合更改沒有任何運氣時。
編輯:正如我在評論中寫道,可以重新分配源屬性進行刷新,但是這會讓GridView再次呈現,這是不好的。我正在尋找可以帶來更好用戶體驗的選項。
GroupCvs不爽快?我不積極,但我認爲它也必須是一個ObservableCollection,所以它知道集合已經改變 – dgarbacz
不是的,是的。我無法將ObservableCollection綁定到我的gridview,因爲在這種情況下,我將擁有與我擁有的許多組一樣多的元素,但不會顯示子項。我查了一些例子,這是使用這個控件的'標準方式'。 – norbip