【发布时间】:2019-11-05 23:50:58
【问题描述】:
我正在将我的 ListView 绑定到我的 Realm 数据库,但是当我向其中添加新项目时它不会刷新它。我正在使用另一个页面添加新项目。
我在这里作为参考:https://help.syncfusion.com/xamarin/sflistview/mvvm#binding-itemssource
我的模特:
public class Category : RealmObject
{
[PrimaryKey]
public string CategoryID { get; set; } = Guid.NewGuid().ToString();
public string CategoryTitle { get; set; }
public string CategoryDetails { get; set; }
[Backlink(nameof(Note.CategoryOfNote))]
public IQueryable<Note> Notes { get; }
public string CategoryIcon { get; set; }
public bool IsExpanded { get; set; }
}
我的 XAML 文件包含 ListView
<ContentPage.BindingContext>
<vm:MainViewModel />
</ContentPage.BindingContext>
<ContentPage.ToolbarItems>
<ToolbarItem Text="NEWCAT"
Clicked="NewCat_Clicked"/>
</ContentPage.ToolbarItems>
<ContentPage.Content>
<ListView x:Name="categoryList"
ItemsSource="{Binding Categories}"
ItemTapped="ListView_ItemTapped"
HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout Orientation="Vertical"
HorizontalOptions="FillAndExpand"
Padding="10"
Spacing="10">
<Label Text="{Binding Path=CategoryTitle}"
FontSize="Medium"/>
<StackLayout IsVisible="{Binding IsExpanded}"
Orientation="Horizontal"
HorizontalOptions="CenterAndExpand">
<Button Text="Notes"
Clicked="NotesButton_Clicked" />
<Button Text="Edit"
Clicked="EditButton_Clicked"/>
<Button Text="Delete"
Clicked="DeleteButton_Clicked"/>
</StackLayout>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</ContentPage.Content>
还有我的 ViewModel (DBServices.GetCategories 是一个静态方法,它从 Realm DB 中返回一个类别的集合。BaseViewModel 实现了 INotifyPropertyChanged)
class MainViewModel : BaseViewModel
{
private Category _oldCategory;
public MainViewModel()
{
RefreshCategories();
}
private void RefreshCategories()
{
Categories = new ObservableCollection<Category>(DBServices.GetCategories());
}
private ObservableCollection<Category> _Categories;
public ObservableCollection<Category> Categories
{
get
{
return _Categories;
}
set
{
_Categories = value;
OnPropertyChanged("Categories");
}
}
}
这是 BaseViewModel 类中的 OnPropertyChanged 方法
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
当我单击工具栏按钮时,它会推送一个新表单页面以创建一个新类别。然后它只是将该类别添加到 Realm DB 中。之后它会自行弹出。但我的 ListView 没有任何变化。
编辑:当我重新启动应用程序时,我可以在 ListView 中看到新项目。但我希望在添加它们时将其列出。
【问题讨论】:
-
所以您在另一个页面中将对象添加到数据库中,然后弹出并期望 MainPage 更新列表视图?
-
@BrunoCaceiro 是的。它仅在应用程序重新启动后更新列表。
标签: c# listview xamarin mvvm xamarin.forms