问题描述
很遗憾,这是我第一次在Silverlight中工作。我对回调非常熟悉,但是我不确定如何将这种方法转换为同步方法以对订单数据执行逻辑。
经常有人告诉我,进行这种同步是不明智的,但是我的目标是检查XAML UI中是否修改了某些字段,并且这些字段与数据库中的字段不同。然后提示更改原因。如果有更好的解决方案,我很想知道。
我在VS 2013中使用.Net Framework 4.0在Silverlight 5中
谢谢!这是异步订单提供者:
public void GetOrder(string ordNumber,Action<Func<OrderLoadResults>> callback)
{
String exStr = String.Format("{0}.{1}() --> received an empty value for",this.GetType().Name,MethodBase.GetCurrentMethod().Name);
if (ordNumber == null)
{
throw new ArgumentNullException("ordNumber",exStr);
}
if (callback == null)
{
throw new ArgumentNullException("callback",exStr);
}
IOrderServiceAsync channel = CreateChannel();
AsyncCallback asyncCallback = ar => GetOrderCallback(callback,ar);
channel.BeginGetOrderByOrdNumber(ordNumber,asyncCallback.ThreadSafe(),channel);
}
这就是我正在做的事情:
public List<ATMModifiedFieldModel> CheckForATMModifiedFields()
{
if (!_order.Stops.Items.Any(x => x.ModelState == ModelState.Modified))
{
return null;
}
List<StopModel> oldStop = new List<StopModel>();
Provider.OrderProvider orderProvider = new Provider.OrderProvider();
//Looking to convert this method to sync to pull the order info out to compare against
//orderProvider.GetOrder(_order.Item.OrdHdrNumber.ToString(),getResult => OnGetOrderComplete(getResult));
List<ATMModifiedFieldModel> modifiedFields = new List<ATMModifiedFieldModel>();
foreach (StopModel stop in _order.Stops.Items)
{
if (stop.ModelState == ModelState.Modified)
{
foreach (string ATMFieldName in Enum.GetNames(typeof(ATMFields)))
{
string beforeValue = "before value"; //Should check the value in the database
string afterValue = stop.GetType().GetProperty(ATMFieldName).GetValue(stop,null).ToString();
if (beforeValue != afterValue)
{
modifiedFields.Add(new ATMModifiedFieldModel(ATMFieldName,beforeValue,afterValue,stop.StpNumber,"Stop"));
}
}
}
}
return modifiedFields;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)