locked
Popup的 IsOpen绑定问题 RRS feed

  • 问题

  • 对Popup的IsOpen进行了绑定 <Popup x:Name="LoadingPopup"  IsOpen="{Binding bLoadingPopup}"> ,设置 bLoadingPopup 的值(true or false),bLoadingPopup的定义如下:

    public bool bLoadingPopup
            {
                get
                {
                    return LoadingPopup_IsOpen;
                }
                set
                {
                    if (this.LoadingPopup_IsOpen != value)
                    {
                        this.LoadingPopup_IsOpen = value;
                        OnPropertyChanged("bLoadingPopup");
                    }
                }
            }

    其他地方都没问题,只有在函数 DownloadXMLComplate 中有问题

    WebClient _webClient = new WebClient();
    _webClient.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadXMLComplate);
    _webClient.DownloadStringAsync(Uri);

    private void DownloadXMLComplate(object sender, DownloadStringCompletedEventArgs e)
            {
                if (e.Cancelled)
                    return;
                if (e.Error != null)
                {        
                        this.bLoadingPopup = false;  //  这里设置了false, popup还是showing,什么情况 
                        app.DopState.IsNetworkAvailable = false;
                        Utilities.ShowMessage("网络不可用或异常,请按Back键退出程序,检查网络后重新尝试!");            
                    return;
                } 
                this.ClassificationData(e);
            }



    • 已编辑 dop_nj 2012年5月21日 6:05
    2012年5月21日 6:01

答案

  • 谢谢,问题解决了,是由于popup所在的page的DataContext设置出了问题
    • 已标记为答案 Otomii Lu 2012年5月22日 6:25
    2012年5月22日 6:16

全部回复

  • 有可能是跨线程调用的问题。

    DownloadXML这个过程是异步的,在单独的线程执行的。

    建议你直接设置IsOpen=false,试试看。

    如果跨线程,需要Dispatcher.Invoke

    2012年5月21日 8:32
  • 谢谢,但是我写成下面这样,也还是有那个问题

      Deployment.Current.Dispatcher.BeginInvoke(() =>
                        {
                            this.bLoadingPopup = false;
                            app.DopState.IsNetworkAvailable = false;
                            Utilities.ShowMessage("网络不可用或异常,请按Back键退出程序,检查网络后重新尝试!");
                        });

    2012年5月21日 8:58
  • 你好,

    建议你在设置this.bLoadingPopup = false之后,监视下LoadingPopup的IsOpen属性是否为false.

    同时在Set方法中放置一个断点,查看是否有代码在设置为False之后有设置为True

    2012年5月22日 2:48
  • 谢谢,问题解决了,是由于popup所在的page的DataContext设置出了问题
    • 已标记为答案 Otomii Lu 2012年5月22日 6:25
    2012年5月22日 6:16