2011-01-06 1 views
1

У меня возникают проблемы с кнопками Commit и Cancel в форме данных для Silverlight. Сначала я не мог понять, почему кнопка «Отмена» не была активирована, когда пользователь нажал кнопку «Изменить». После некоторых исследований я обнаружил, что это связано с тем, что объект не был IEditableObject. Это отсортировало кнопку отмены, но теперь кнопка Commit решила стать включенной, где она была не раньше, даже после того, как значение изменилось.Кнопки отправки и отмены формы данных

Мой вопрос в том, как я могу его активировать?

XAML:

<dataFormToolkit:DataForm CurrentItem="{Binding ViewModel, ElementName=AccountPage, Mode=TwoWay}" CommandButtonsVisibility="{Binding ViewModel.CommandButtonsVisibility, ElementName=AccountPage, Mode=TwoWay}" AutoEdit="False" AutoGenerateFields="False" AutoCommit="False"> 
     <dataFormToolkit:DataForm.EditTemplate> 
      <DataTemplate> 
       <StackPanel> 
        <dataFormToolkit:DataField Label="Organisation Name"> 
         <TextBox Text="{Binding Customer.Name, Mode=TwoWay}"/> 
        </dataFormToolkit:DataField> 
       </StackPanel> 
      </DataTemplate> 
     </dataFormToolkit:DataForm.EditTemplate> 
    </dataFormToolkit:DataForm> 

XAML.cs:

public partial class Account : Page 
{ 
    public VMAccount ViewModel { get; set; } 

    public Account() 
    { 
     InitializeComponent(); 
    } 

    // Executes when the user navigates to this page. 
    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     ViewModel = new VMAccount(Global.Client.CurrentPerson.Customer); 
    } 

} 

VMAccount:

public class VMAccount : VMBase, IEditableObject 
{ 
    public VMAccount(Customer customer) 
    { 
     Customer = customer; 
    } 

    private Customer m_oCustomer; 
    public Customer Customer 
    { 
     get { return m_oCustomer; } 
     set 
     { 
      if (m_oCustomer != value) 
      { 
       m_oCustomer = value; 
       OnPropertyChanged("Customer"); 
      } 
     } 
    } 

    public event EventHandler<AsyncResultArgs> SaveCustomerSuccess; 
    public event EventHandler<AsyncResultArgs> SaveCustomerFailure; 

    #region IEditableObject Members 

    public void BeginEdit() 
    { 
     Customer.PropertyChanged += new PropertyChangedEventHandler(OnCustomerPropertyChanged); 
     Customer.ContactInfo.PropertyChanged += new PropertyChangedEventHandler(OnCustomerPropertyChanged); 
    } 

    public void CancelEdit() 
    { 
     (Customer as IRevertibleChangeTracking).RejectChanges(); 
     (Customer.ContactInfo as IRevertibleChangeTracking).RejectChanges(); 
    } 

    public void EndEdit() 
    { 
     if (Customer.HasChanges) 
     { 
      Global.Client.MainContext.SubmitChanges((lo) => 
      { 
       HandleResult("Save Customer", lo, true, SaveCustomerSuccess, SaveCustomerFailure); 
      }, null); 
     } 
    } 

    #endregion 

    private void OnCustomerPropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     OnPropertyChanged("Customer"); 
    } 
} 

VMBase:

public class VMBase : INotifyPropertyChanged 
{ 
    protected virtual void OnPropertyChanged(string property) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    #endregion 
} 

Я включил обработчик события OnCustomerPropertyChanged, чтобы увидеть, могу ли я заставить форматировать данные, чтобы свойство Customer изменилось, но это не имеет значения, даже если это событие срабатывает. Я попытался удалить IEditableObject, чтобы подтвердить, что это проблема ...

public class VMAccount : VMBase//, IEditableObject 
... 

Спасибо за любую помощь.

EDIT: Я хотел бы добавить, что Клиент является RIA Entity

ответ

0

Так получается, что я пытался изменить вложенный объект, который не может быть сделано до тех пор, RIA инструментарий SP1 не будет отпущена. Благодарю.

0

Вы проблема может быть похожа на вопрос Silverlight 3 Dataform Commit Button not activating

Пожалуйста, пересмотреть this response

Я была такая же isue с ​​использованием Silverlight 4 и РИА serivces.

я решил установкой WCF RIA Services Service Pack 1 и переустановку WCF RIA Services Toolkit для WCF RIA Services SP1.

Это две установки можно найти по адресу: http://www.silverlight.net/getstarted/riaservices/

Прямая ссылка на WCF RIA Services SP 1: http://go.microsoft.com/fwlink/?LinkId=205085 Прямая ссылка на WCF RIA Services инструментарий для WCF RIA Services SP1: http://go.microsoft.com/fwlink/?LinkID=205088