Я пытаюсь получить доступ к внутреннему свойству в 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 = Attemptс помощью метода «DataGridDragAndDropSample.MainPage.Button_Click (System.Object, System.Windows.RoutedEventArgs)» получить доступ к методу «System.Windows.Controls.DataGrid.get_DisplayData ()» не удалось.StackTrace: в System.RuntimeMethodHandle.PerformSecurityCheck (объектный объект, метод RuntimeMethodHandleInternal, родительский объект RuntimeType, invocationFlags UInt32) в системном объекте.obj, BindingFlags invokeAttr, связыватель Binder, параметры Object [], культура CultureInfo, логическое skipVisibilityChecks) в System.Reflection.RuntimeMethodInfo.Invoke (Object obj, параметры BindingFlags invokeAttr, связыватель Binder, Object [], культура CultureInfo) в System.Ref.RuntimePropertyInfo.GetValue (Object obj, BindingFlags invokeAttr, Binder binder, Object [] index, CultureInfo culture) в System.Reflection.RuntimePropertyInfo.GetValue (Object obj, Object [] index) в DataGridDragAndDropSample.MainPageEventDervent_vent_Gender) в 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, EventArgs e) в MS.Internal.JoltEntjbT, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName) InnerException:
Есть ли другой способ получить доступ к этому свойству в 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();
}
}
}
Есть предложения?
С уважением, Картик