我使用此库https://github.com/step-up-labs/firebase-database-dotnet
从firebase检索项目,然后实时将其显示到datagrid。
但是我在显示它时遇到困难,根据上面的链接获得实时流媒体,我需要使用此代码:
var firebase = new FirebaseClient("https://dinosaur-facts.firebaseio.com/");
var observable = firebase
.Child("dinosaurs")
.AsObservable<Dinosaur>()
.Subscribe(d => Console.WriteLine(d.Key));
我尝试使用此代码,但gridview上没有显示任何内容:
var observable = firebase
.Child("news/item")
.AsObservable<News>();
disposable = observable.Subscribe();
dataGrid.ItemsSource = observable.AsObservableCollection();
我也试试这个没有运气:
private ObservableCollection<News> _myItems = new ObservableCollection<News>();
private IEnumerable<News> MyNews { get { return _myItems; } }
private void Window_Loaded(object sender, RoutedEventArgs e)
{
var observable= firebase
.Child("news/item")
.AsObservable<News>();
_myItems = observable.AsObservableCollection();
disposable = observable.Subscribe();
dataGrid.ItemsSource = MyNews;
}
答案 0 :(得分:2)
问题是可观察的回调,包括修改ObservableCollection
返回的AsObservableCollection
,默认情况下在线程池线程上运行。但是你不能在非UI线程上修改ObservableCollection
,因此存在被吞下的异常。所以相反,这样做:
var observable = firebase
.Child("news/item")
.AsObservable<News>();
dataGrid.ItemsSource = observable
.ObserveOnDispatcher() // < key point
.AsObservableCollection();
请勿忘记安装nuget包System.Reactive.Windows.Threading
并添加using System.Reactive.Linq;
以访问ObserveOnDispatcher
扩展方法。
也不需要致电observable.Subscribe();
,除非您需要其他东西。 AsObservableCollection
已订阅。
答案 1 :(得分:0)
@Evk,但是ObserveOnDispatcher()或datagrid存在问题
我已经在这篇文章中描述了这个问题: