【问题标题】:Dataform submit and cancel buttons数据表单提交和取消按钮
【发布时间】:2011-01-06 15:19:39
【问题描述】:

我在使用 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");
    }
}

虚拟机基础:

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 实体

【问题讨论】:

    标签: c# silverlight dataform


    【解决方案1】:

    结果我试图编辑一个嵌套对象,直到发布 RIA 工具包 SP1 才能完成。谢谢。

    【讨论】:

      【解决方案2】:

      您的问题可能与问题Silverlight 3 Dataform Commit Button not activating类似

      请修改this response

      我在使用 silverlight 4 和 RIA 服务时遇到了同样的问题。

      我解决了安装 WCF RIA 服务 Service Pack 1 和 重新安装 WCF RIA 服务 WCF RIA 服务 SP1 工具包。

      这两个安装程序可以在以下位置找到: http://www.silverlight.net/getstarted/riaservices/

      直接链接到 WCF RIA 服务 SP 1: http://go.microsoft.com/fwlink/?LinkId=205085 直接链接到 WCF RIA 服务 WCF RIA 服务 SP1 的工具包: http://go.microsoft.com/fwlink/?LinkID=205088

      【讨论】:

        猜你喜欢
        • 2011-12-28
        • 1970-01-01
        • 1970-01-01
        • 2016-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多