2010-04-02 5 views
0

J'ai une forme qui a beaucoup d'onglets. Chaque onglet a de nombreux champs de contrôle, zones de liste déroulantes, listes de données et e .t.c. Je lie la forme à une source de données de cette manièreProblème avec WPF perfomance

this.DataContext=MyClassInstance 

Mais avec cette façon ma forme s'ouvre très lentement. environ une minute.

Lorsque je commente le code ci-dessus, le formulaire s'ouvre très rapidement. Tous mes contrôles Je me suis lié aux propriétés de classe dans XAML. S'il vous plaît dites-moi le moyen de lier chaque onglet quand il est activé, ou lier les contrôles dans le fil de fond ou toute autre idée qui peut m'aider à accélérer mon formulaire.

Merci d'avance.

Répondre

0

J'ai trouvé pourquoi mon formulaire s'ouvrait si lentement. J'utilise environ 20 objet XMLDataProvider dans le formulaire. et ces fournisseurs étaient iteract avec le fichier xml. Quand je commente le code ci-dessous tout fonctionne vite. Merci à tous pour votre aide

   //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

Je pense que le problème réside dans votre instance de classe que vous liez.

Lorsque le XAML est lié à la classe, tous les apporteurs des propriétés liées sont tirées. Si chaque getter accède à la base de données pour obtenir des données, cela peut prendre un certain temps.

Je pense que vous devriez vraiment revoir votre conception ici, et pensez à aller chercher vos données de manière asynchrone.

+0

J'utilise des classes de service Web pour mes fomrs. au moment où je lie ma classe à la forme, elle est entièrement remplie de données. Je ne me réfère pas à la base de données. La seule chose que je change pour ces classes est d'utiliser PostSharp pour gérer INotifierPropertyChanged, mais mon aspect postsharp ne change que les settters de propriétés. Je suis nouveau dans WPF. Que voulez-vous dire par aller chercher de manière asynchrone? – Polaris

0

Je suis d'accord avec Gerrie.

Je suggère ce qui suit: Lorsque vous démarrez votre application, vous ouvrez automatiquement un onglet je suppose. Chargez seulement cet onglet, ne vous souciez pas des autres. Cela devrait démarrer votre projet beaucoup plus rapidement. Ce que vous faites pour les autres onglets est de les charger lorsque vous cliquez dessus pour la première fois. Lorsque l'utilisateur par exemple s'intéresse à l'onglet 5, les seuls qui seront chargés seront l'onglet initial au démarrage, et l'onglet 5 lorsque l'utilisateur cliquera dessus. tous les autres onglets ne seront pas chargés, ce qui diminuera le temps de démarrage.

L'espoir, l'idée est clair pour vous et aider votre application.