سؤال

أواجه مشكلة في الالتزام وإلغاء الأزرار في DataForm for Silverlight. في البداية ، لم أتمكن من معرفة سبب عدم تمكين زر الإلغاء عندما نقر المستخدم على التحرير. بعد بعض الأبحاث ، وجدت أن هذا هو أن الكائن لم يكن قابلاً للعبث. قام ذلك بفرز زر الإلغاء ولكن الآن قرر زر الالتزام تمكينه ، حيث لم يكن من قبل ، حتى بعد تغير القيمة.

سؤالي هو ، كيف يمكنني تمكينه؟

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" لمعرفة ما إذا كان بإمكاني إجبار DataForm على acknoledge قد تغيرت خاصية العميل ولكنها لا تحدث فرقًا ، على الرغم من أن الحدث يطلق النار. لقد حاولت إزالة eedableBject لتأكيد أن هذه هي المشكلة ...

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

شكرا على اي مساعدة.

تحرير: يجب أن أضيف أن العميل كيان ريا

هل كانت مفيدة؟

المحلول

لذلك اتضح أنني كنت أحاول تحرير كائن متداخل لا يمكن القيام به حتى يتم إصدار مجموعة أدوات RIA SP1. شكرًا.

نصائح أخرى

يمكن أن تكون المشكلة متشابهة في السؤال الزر Silverlight 3 DataForm التزام لا يتم تنشيطه

اعد الصياغة رجاءا هذا الرد

كان لدي نفس isue باستخدام Silverlight 4 و RIA Serivces.

لقد قررت تثبيت حزمة خدمات خدمات WCF RIA 1 وإعادة تثبيت مجموعة أدوات خدمات WCF RIA لخدمات WCF RIA SP1.

يمكن العثور على هذا التثبيت على: http://www.silverlight.net/getstarted/riaservices/

الرابط المباشر إلى WCF RIA Services SP 1: http://go.microsoft.com/fwlink/؟linkid=205085رابط مباشر إلى مجموعة أدوات خدمات WCF RIA لـ WCF RIA Services SP1: http://go.microsoft.com/fwlink/؟linkid=205088

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top