2009-09-22 78 views
0

只要用戶退出某個字段,DataForms似乎就會更新其CurrentItem。即使AutoCommit = false,也會發生這種情況。該行爲的副作用是在用戶編輯數據時綁定到數據的其他控件更新,而不是當用戶單擊「確定」接受DataForm更改時。有沒有辦法修改該行爲,以便在用戶接受更改時將數據寫入CurrentItem?當RIA Services DataForm將更改發送到後臺對象時發生更改

編輯:這裏是大部分的XAML爲我使用的DataForm:

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> 

編輯2:我使用的是避免這種行爲的解決方法是使對象的副本進行編輯並將其設置爲DataForm.CurrentItem屬性,然後如果用戶接受編輯,則數據將被複制回原始對象。我希望有更好的解決方案。

+0

我有點困惑你的問題。數據表單不是RIA的一部分。你在編輯一個DomainDataSource嗎?我們可以看到一些示例xaml嗎? – Jeremiah 2009-09-22 18:41:01

+0

對不起,我添加了一些Xaml。 DataForm是.NET RIA Services框架的一部分 - 我正在使用2009年7月份的RIA Services的CTP。 – 2009-09-22 19:36:13

回答

1

一切都綁定到實體的同一個實例。由於DataForm字段綁定到實體上的屬性,因此當您離開字段時,它會調用屬性設置器,更改該值並引發INotifyPropertyChanged.PropertyChanged事件。這會通知其他綁定控件該值已更改並且綁定更新。

如果您確實想要防止這種情況發生,您需要做一些大量工作來克隆DataForm綁定的實體,然後在提交該項時使用克隆的值更新原始數據。這不會被推薦。

或者,您可以有多個DomainContext實例並加載實體兩次 - 一次用於DataForm,一次用於其他顯示。在提交更改後,您可以重新加載其他實體。這可能會導致您的應用程序中出現其他問題,所以也不推薦。

我很好奇爲什麼活動綁定導致問題。

+0

我很好奇爲什麼活綁定*不會導致問題:-) – 2010-08-03 00:39:24

相關問題