2009-09-22 11 views
0

DataForms semble mettre à jour son CurrentItem dès que l'utilisateur quitte un champ. Cela arrive même lorsque AutoCommit = false. L'effet secondaire de ce comportement est que les autres contrôles qui sont liés à la mise à jour des données pendant que l'utilisateur édite des données au lieu de lorsque l'utilisateur clique sur OK pour accepter les modifications DataForm. Existe-t-il un moyen de modifier ce comportement pour reporter les données d'écriture à CurrentItem lorsque l'utilisateur accepte les modifications?Modifier lorsqu'un RIA Services DataForm envoie des modifications à l'objet de sauvegarde

EDIT: Voici la plupart des Xaml pour un DataForm J'utilise:

xmlns:DataFormControls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit" 

<DataFormControls:DataForm x:Name="dataForm" AutoCommit="False" AutoEdit="False">   
      <DataFormControls:DataForm.EditTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Vertical"> 

         <DataFormControls:DataField Label="Title"> 
          <TextBox Text="{Binding Title, Mode=TwoWay}" Style="{StaticResource TextBoxStyle}"/> 
         </DataFormControls:DataField> 

         <DataFormControls:DataField Label="First Name"> 
          <TextBox Text="{Binding FirstName, Mode=TwoWay}"/> 
         </DataFormControls:DataField> 

         <DataFormControls:DataField Label="Middle Name"> 
          <TextBox Text="{Binding MiddleName, Mode=TwoWay}"/> 
         </DataFormControls:DataField> 

         <DataFormControls:DataField Label="Last Name"> 
          <TextBox Text="{Binding LastName, Mode=TwoWay}"/> 
         </DataFormControls:DataField> 
        </StackPanel> 
       </DataTemplate> 
      </DataFormControls:DataForm.EditTemplate> 
     </DataFormControls:DataForm> 

EDIT 2: La solution que je utilise pour éviter ce problème est de faire une copie de l'objet à modifier et définissez-la sur la propriété DataForm.CurrentItem, puis, si l'utilisateur accepte la modification, les données sont copiées dans l'objet d'origine. J'espère qu'il existe une meilleure solution.

+0

Je suis un peu confus au sujet de votre question. Les formulaires de données ne font pas partie de RIA. Êtes-vous en train de modifier un DomainDataSource? Pouvons-nous voir un exemple de xaml? – Jeremiah

+0

Désolé pour la confusion, j'ai ajouté du Xaml. DataForm fait partie du framework .NET RIA Services - J'utilise le CTP des services RIA de juillet 2009. –

Répondre

1

Tout est lié à la même instance de l'entité. Étant donné que les champs DataForm sont liés aux propriétés de l'entité, lorsque vous quittez un champ, il appelle le setter de propriétés, modifiant la valeur et augmentant les événements INotifyPropertyChanged.PropertyChanged. Cela informe ensuite les autres contrôles liés que la valeur a changé et leurs liaisons sont mises à jour. Si vous voulez vraiment éviter cela, vous devrez effectuer un gros travail pour cloner l'entité à laquelle le DataForm est lié, puis, lorsque l'élément est validé, mettre à jour l'original avec les valeurs du clone. Ce ne serait pas recommandé. Vous pouvez également avoir plusieurs instances de DomainContext et charger les entités deux fois, une fois pour le DataForm et une fois pour les autres affichages. Après avoir soumis des changements sur un, vous pourriez recharger les entités pour l'autre. Cela entraînera probablement d'autres problèmes dans votre application, il n'est donc pas recommandé.

Je suis curieux de savoir pourquoi la liaison en direct cause un problème.

+0

Je suis curieux de savoir pourquoi la liaison en direct * ne causerait pas * un problème :-) –