Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Silverlight数据网格中的反射内部属性_C#_Silverlight_Reflection - Fatal编程技术网

C# Silverlight数据网格中的反射内部属性

C# Silverlight数据网格中的反射内部属性,c#,silverlight,reflection,C#,Silverlight,Reflection,我正在尝试使用以下代码访问Silverlight DataGrid中的内部属性: var displayDataType = dataGrid.GetType().GetProperty("DisplayData", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); var displayData = displayDataType.GetValue(data

我正在尝试使用以下代码访问Silverlight DataGrid中的内部属性:

 var displayDataType = dataGrid.GetType().GetProperty("DisplayData", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
        var displayData = displayDataType.GetValue(dataGrid, null);
但我有以下例外

System.MethodAccessException未由用户代码处理 Message=通过方法“DataGridDragAndDropSample.MainPage.按钮”尝试访问方法“System.Windows.Controls.DataGrid.get_DisplayData()”失败。 堆栈跟踪: 在System.RuntimeMethodHandle.PerformSecurityCheck(对象obj、RuntimeMethodHandleInternal方法、RuntimeType父级、UInt32调用标志) 在System.RuntimeMethodHandle.PerformSecurityCheck(对象obj、IRuntimeMethodInfo方法、RuntimeType父级、UInt32调用标志) 在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性、布尔skipVisibilityChecks) 在System.Reflection.RuntimeMethodInfo.Invoke(对象obj、BindingFlags invokeAttr、绑定器绑定器、对象[]参数、CultureInfo区域性) 位于System.Reflection.RuntimePropertyInfo.GetValue(对象obj、BindingFlags invokeAttr、Binder Binder、对象[]索引、CultureInfo区域性) 位于System.Reflection.RuntimePropertyInfo.GetValue(对象obj,对象[]索引) 在DataGridDragAndDropSample.MainPage.按钮上单击(对象发送器,路由EventTarget e) 在System.Windows.Controls.Primitives.ButtonBase.OnClick()中 在System.Windows.Controls.Button.OnClick()中 在System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp(MouseButtonEventArgs e) 在System.Windows.Controls.Control.OnMouseLeftButtonUp(控件ctrl,事件参数e) 在MS.Internal.JoltHelper.firevent处(IntPtr unmanagedObj、IntPtr unmanagedobjars、Int32 argsTypeIndex、Int32 actualgstypeindex、String eventName) 内部异常:

在Silverlight DataGrid中是否有其他方法访问此属性

我用简单的示例检查了代码,它似乎可以工作。示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLib
{
    public class Data
    {
        public Data()
        {
            this.Num = new Num() { Name = "ctor" };
        }

        internal Num Num
        {
            get;
            private set;
        }
    }

    internal class Num
    {
        private string name = string.Empty;
        public string Name
        {
            get
            {
                return this.name;
            }
            internal set
            {
                this.name = value;
            }
        }
    }
}

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Data d = new Data();

            var displayDataType = d.GetType().GetProperty("Num", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
            var displayData = displayDataType.GetValue(d, null);


            Console.ReadKey();
        }
    }  
}
有什么建议吗

问候,,
当属性为内部时,Karthik

必须启用用户代码才能具有

反射权限

有了银色的灯光,所有的极限都会消失

防止滥用的适当措施


不存在;当属性为内部时,可能出现

必须启用用户代码才能具有

反射权限

有了银色的灯光,所有的极限都会消失

防止滥用的适当措施


不存在;可能的

根据我对Silverlight和reflection的了解,您试图做的是不允许的。请参阅此条目:


我曾多次使用Reflector来检查DataGrid(以及CodePlex中的代码本身),以找到访问不容易暴露的部分的方法。。。在DataGrid(和相关类)上有这么多东西是内部的,这有点令人沮丧。我没有找到访问您感兴趣的DisplayData属性的方法。您可能需要查看代码,看看是否可以找到另一种方法来获得所需的内容。

根据我对Silverlight和reflection的了解,您尝试执行的操作是不允许的。请参阅此条目:


我曾多次使用Reflector来检查DataGrid(以及CodePlex中的代码本身),以找到访问不容易暴露的部分的方法。。。在DataGrid(和相关类)上有这么多东西是内部的,这有点令人沮丧。我没有找到访问您感兴趣的DisplayData属性的方法。您可能需要查看代码,看看是否可以找到其他方法来获得所需的内容。

@Jeff Machamer:添加了例外details@JeffMachamer:添加了异常详细信息