启动后,我的应用程序从UI的xml文件加载数据。我面临的问题是在我的数据之前加载UI,当源更新时,UI的绑定将丢失。
如果我在设置datacontext绑定之前在我的主页面的构造函数中加载数据,那么它可以工作,但是在完成时UI被冻结
Stream readStream = await localFolder.OpenStreamForReadAsync("queue.xml");
using (StreamReader rd = new StreamReader(readStream))
{
{
App.ViewModel.Queue = xs2.Deserialize(rd) as ObservableCollection<ItemViewModel>;
rd.Close();
}
}
如果我在后台工作器中加载它,它是平滑的,UI没有被冻结,但App.Viewmodel.Queue被分配给Deserialized对象,然后UI绑定从原始对象中丢失。
我可以以某种方式让绑定自动更新到新对象吗?此加载函数来自外部类,因此我无法在加载项目源时重置它。
答案 0 :(得分:0)
我已经找到了适用于我的情况的东西。它不一定是最优雅的,但它可以完成工作。
我将WebBrowser的默认Opacity设置为0.然后,我为LoadCompleted事件附加了一个事件处理程序:
private void browser_Post_LoadCompleted(object sender, NavigationEventArgs e)
{
browser_Post.Opacity = 1;
}
现在,在我加载新的HTML页面之前,我将Opacity设置回0,以便在呈现新HTML时隐藏浏览器,这样就不会出现背景闪烁。 HTML完成加载后,将触发事件,新的HTML页面将按预期显示。
答案 1 :(得分:0)
在PropertyChanged
属性集上提升Queue
事件将使通过数据绑定机制自动更新绑定到Queue
的UI控件。以下是如何举起活动的示例:
private ObservableCollection<ItemViewModel> _queue;
public ObservableCollection<ItemViewModel> Queue
{
get
{
return _queue;
}
set
{
if (value != _queue)
{
_queue = value;
NotifyPropertyChanged("Queue");
}
}
}