2010-04-02 102 views
0

我有一個包含許多選項卡的表單。每個選項卡都有許多控件文本框,組合框,數據網格和e .t.c。我以這種方式將表單綁定到一個數據源WPF性能問題

this.DataContext=MyClassInstance 

但是用這種方法我的表單打開很慢。大約一分鐘。

當我評論上面的代碼時,表單很快就會打開。所有我的控件綁定到XAML中的類屬性。請告訴我在激活時綁定每個選項卡的方式,或者在後臺線程中綁定控件或者可以幫助我加速表單的其他任何想法。

在此先感謝。

回答

0

我發現爲什麼我的表單打開得太慢。我在表單中使用了大約20個XMLDataProvider對象。並且這個提供者正在迭代xml文件。當我在代碼下面評論一切工作很快。感謝大家的幫助

   //relatives_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_RelativeList" }; 
      //education_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_EducationList" }; 
      //requalification_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_RequalificationList" }; 
      //jobHistory_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_JobHistoryList" }; 
      //rank_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_RankList" }; 
      //tradeUnion_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_TradeUnionList" }; 
      //election_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_ElectionList" }; 
      //judgeHistory_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_JudgeHistoryList" }; 
      //tempWork_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_TempWorkList" }; 
      //inquire_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_InquireList" }; 
      //bulleten_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_BulletenList" }; 
      //reprimand_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_ReprimandList" }; 
      //certificate_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_CertificateList" }; 
      //course_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_CourceList" }; 
      //incentive_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_IncentiveList" }; 
      //btrip_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_BtripList" }; 
      //vacation_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_VacationList" }; 
      //pass_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_PassList" }; 
      //language_xdp = new XmlDataProvider() { Source = uri, XPath = "Config/ColumnsVisibility/Person_LanguageList" }; 
0

我認爲問題在於你綁定的類實例。

當xaml綁定到類時,綁定屬性的所有getter都會被觸發。如果每個getter訪問數據庫以獲取一些數據,這可能需要一段時間。

我認爲你應該真的在這裏審查你的設計,並考慮異步獲取你的數據。

+0

我正在爲我的fomrs使用web服務類。當我將我的課程綁定到表單時,它完全充滿了數據。我不提到數據庫。只有我改變這些類的事情是使用PostSharp來處理INotifierPropertyChanged,但是我的postharp方面只改變了屬性的設置。 我是WPF中的新成員。你的意思是異步提取? – Polaris 2010-04-02 09:59:01

0

我同意Gerrie。

我建議如下: 當你開始你的應用程序時,你會自動打開一個標籤,我猜。只加載該標籤,不關心其他標籤。這應該更快地啓動你的項目。 您爲其他標籤所做的事情是在第一次點擊時加載它們。例如,當用戶對標籤5感興趣時,唯一的加載將是啓動時的初始標籤,而用戶點擊標籤5。所有其他選項卡將不會被加載,這會縮短啓動時間。

希望這個想法對你很明確,並且會幫助你的應用程序。