Windows Phone Binding在设置新对象时丢失

时间:2013-12-31 06:40:12

标签: binding windows-phone-8

启动后,我的应用程序从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绑定从原始对象中丢失。

我可以以某种方式让绑定自动更新到新对象吗?此加载函数来自外部类,因此我无法在加载项目源时重置它。

2 个答案:

答案 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");
        }
    }
}