我有一个DataGrid绑定到动态列表,现在我想要的是从DataGrid获取所选项的值,但得到错误Additional information: 'object' does not contain a definition for 'Receipt_Date'
以下是代码:
var selectedItem = itemsDataGrid.SelectedItem as dynamic;
Debug.WriteLine(selectedItem.Receipt_Date); //This line is throwing exception.
当我在Visual Studio中的立即窗口中打印selectedItem
时,我可以看到如下值:
{ ID = 426,
Receipt_Date = 12/30/2014 12:00:00 AM,
Total= 380.8200,
Tax = 0.0000,
Amount_Final = 373.2000,
flag = 0.0000 }
我是新手,并且不知道我哪里弄错了。
答案 0 :(得分:1)
我将首先指出您的代码存在的问题......
var selectedItem = itemsDataGrid.SelectedItem as dynamic;
使用var
意味着编译器将通过查看代码中的赋值来推断类型。问题是您已为其分配dynamic
,并且dynamic
类型在运行时之前不会绑定。因此,您的代码中存在矛盾,使用var
时无法推断dynamic
的类型。编译器将验证var
类型上的每个属性或函数调用,因为它在编译时应该是已知类型。 Dynamic不能像这样工作,动态类型的属性和函数在编译时不会被验证。
你应该试试这个:
dynamic d = itemsDataGrid.SelectedItem;
Debug.WriteLine(d.Receipt_Date);
现在我的问题不仅仅是纯粹的学习,为什么要这样做?
我个人在访问我没有C#类型的COM对象时只使用dynamic
。