Silverlight 提交时是否可以编辑WCF Ria服务实体?

Silverlight 提交时是否可以编辑WCF Ria服务实体?,silverlight,wcf,ria,Silverlight,Wcf,Ria,我有一个使用WCF RIA服务的silverlight应用程序 我想在每次更改属性时提交更改 但是,如果用户在提交完成之前尝试更改同一实体中的另一个属性,则会出现以下错误: 此实体当前为只读。存在以下条件之一:已调用自定义方法、正在进行提交操作或实体类型不支持编辑操作 场景: 用户更改实体1中的属性A 应用程序捕获更改并提交WCF数据上下文 用户更改实体1中的属性B后不久。但是,由于正在提交,此属性为只读 是否可以更改DataContext的行为,以便我可以在提交过程中更新实体?请注意-我可能会

我有一个使用WCF RIA服务的silverlight应用程序

我想在每次更改属性时提交更改

但是,如果用户在提交完成之前尝试更改同一实体中的另一个属性,则会出现以下错误:

此实体当前为只读。存在以下条件之一:已调用自定义方法、正在进行提交操作或实体类型不支持编辑操作

场景:

  • 用户更改实体1中的属性A
  • 应用程序捕获更改并提交WCF数据上下文
  • 用户更改实体1中的属性B后不久。但是,由于正在提交,此属性为只读

  • 是否可以更改DataContext的行为,以便我可以在提交过程中更新实体?

    请注意-我可能会对此响应感到厌烦:

    让我试着听听你的话: 如果我是正确的,在接口上,值被更改,这些值被绑定到某个实体。此实体是您希望在服务器上实时更新的实体。如果是这样,我建议: 假设我有一个文本框,当用户在文本框中键入值时,它会更新绑定实体,我希望该实体同时在服务器上更新-定义一个行为以采用keyup方法并触发,例如(
    AssociatedObject.GetBindingExpression(TextBox.TextProperty).UpdateSource();
    ) 此外,在这种行为中,我会给文本框定义一个方法来绑定OnKeyUp事件,允许我,也就是说,一旦用户按下“Enter”,然后在服务器上实际执行udpate。此外,我会创建一个加载屏幕/子窗口来显示“saving”-这将导致“阻塞”发生,以防止在保存过程中出现任何进一步的用户干预。在回电话的时候。我会关上窗户,上面写着装货

    现在,就像我说的,我不确定这是否是你想要的答案,但这个想法背后的理论,特别是只有进入或最终改变时才被阻挡似乎是你最好的选择。文本框的行为示例如下:

    包括您的库:
    使用CustomControlsUI.Extensions
    定义文本框的类:
    public类ttextboxkeyubehavior:Behavior
    为要动态绑定到的ontextkeyup定义方法指针:
    protectedmethodinfo OnTextBoxKeyUp{get;set;}
    定义命名要绑定到的OnTextKeyUpMethod的公共字符串:
    OnTextBoxKeyUpMethod

    在行为中定义TextboxKeyUp事件:

        /// <summary>
        /// Method impl. for the onkey up event
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void TextBoxKeyUp(object sender, KeyEventArgs e)
        {
            if (!object.ReferenceEquals(AssociatedObject.GetBindingExpression(TextBox.TextProperty), null))
            {
    
                AssociatedObject.GetBindingExpression(TextBox.TextProperty).UpdateSource();
            }
            if (!string.IsNullOrEmpty(OnTextBoxKeyUpMethod) && !object.ReferenceEquals(AssociatedObject,null) && 
                !object.ReferenceEquals(AssociatedObject.DataContext,null))
            {
                try
                {
                    //use reflection to try and find the method being pointed to.
                    if (object.ReferenceEquals(OnTextBoxKeyUp, null))
                    {
                        MethodInfo _m = null;
                        _m = AssociatedObject.DataContext.GetType().GetMethod(OnTextBoxKeyUpMethod, new Type[] { typeof(object), typeof(KeyEventArgs) });
                        if (!object.ReferenceEquals(_m, null))
                            //set the pointer to the on text box key up method
                            OnTextBoxKeyUp = _m;
                    }
                    OnTextBoxKeyUp.Invoke(AssociatedObject.DataContext, new object[] { sender, e });
                }
                catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); }
            }
        }
    
    用法: 包括存储行为的命名空间:
    xmlns:ccui=“clr namespace:CustomControlsUI.Behaviors;assembly=CustomControlsUI”

    包括System.Windows.Interactive和Microsoft.Expression.Interactions的名称空间:

    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
           xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
    
    将OnKeyUpt附加到viewmodel中所需的方法:

    <TextBox Grid.Column="1" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="6,4,0,0" 
                                              Name="txtFirstName" VerticalAlignment="Top" Width="200" Text="{Binding FirstName, Mode=TwoWay}">
                                        <i:Interaction.Behaviors>
                                            <ccui:TTextBoxKeyUpBehavior OnTextBoxKeyUpMethod="OnSearchKeyUp" />
                                        </i:Interaction.Behaviors>
                                    </TextBox>
    
    最后定义向上键方法以通知服务器更改:

    #region "Helper Method"
        public void OnSearchKeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter && IsSearchStateValid==true)
            {
                OnFindCustomers(sender);
            }
        }
        #endregion
    
    请注意:我可能对这个答案感到困惑。但这只是基于我认为你在寻找的

    public string FirstName 
        { 
            get 
            { 
                return __fFirstName; 
            }
            set
            {
                __fFirstName = value;
                //this is a custom extension on INotifyPropertyChanged
                this.NotifyPropertyChanged("FirstName", PropertyChanged);
            }
        }
    
    #region "Helper Method"
        public void OnSearchKeyUp(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter && IsSearchStateValid==true)
            {
                OnFindCustomers(sender);
            }
        }
        #endregion