我在javascript中访问Silverlight ObservableCollection计数,但是我收到以下错误。
Microsoft JScript runtime error: System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at System.Windows.Hosting.ScriptingInterface.GetScriptParamValueForType(ScriptParam scriptParam, Type desiredType)
at System.Windows.Hosting.ScriptingInterface.ConvertFromScriptParams(Type[] desiredTypes, ScriptParam[] args)
at System.Windows.Browser.ManagedObjectInfo.ListIndexerMember.Invoke(ManagedObject obj, InvokeType invokeType, ScriptParam[] args)
at System.Windows.Browser.ManagedObjectInfo.Invoke(ManagedObject obj, InvokeType invokeType, String memberName, ScriptParam[] args)
at System.Windows.Hosting.ManagedHost.InvokeScriptableMember(IntPtr pHandle, Int32 nMemberID, Int32 nInvokeType, Int32 nArgCount, ScriptParam[] pArgs, ScriptParam& pResult, ExceptionInfo& pExcepInfo)
我正在使用以下代码,其中children是自定义对象的可观察集合。
reg.OnDropping = function (sender, args) {
if (args.toItem.Children.Count > 0) {
args.cancel = true;
}
else {
args.cancel = false;
}
}
还有其他方法可以在Javascript中访问计数吗?
此致 KARTHIK
答案 0 :(得分:1)
为了从Javascript访问对象的属性,要么需要使用ScriptableMember
属性标记属性,要么将其所属的类标记为ScriptableType
。这些都不适用于ObservableCollection<T>
类。
实用的解决方案是在自定义对象中添加HasChildren
属性: -
[ScriptableMember]
public bool HasChildren
{
get { return Children.Count > 0; }
}
答案 1 :(得分:0)
你有没有制作过observablecollection ScriptableMember?您需要在javascript中添加此属性以使其可用。请查看以下链接以获取更多信息:
Walkthrough: Calling Managed Code from JavaScript
HtmlPage.RegisterScriptableObject Method
我希望它有所帮助。