Кнопки отправки и отмены формы данных

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

У меня вопрос, как мне его включить?

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

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

РЕДАКТИРОВАТЬ: я должен добавить, что Клиент является субъектом RIA


person zXynK    schedule 06.01.2011    source источник


Ответы (2)


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

person zXynK    schedule 11.01.2011

Проблема может быть аналогичной в вопросе Кнопка фиксации данных Silverlight 3 не активируется

Пожалуйста, исправьте этот ответ

У меня была такая же проблема с использованием Silverlight 4 и служб RIA.

Я решил установить 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

person Juan Carlos Velez    schedule 09.07.2011