【问题标题】:Indexing through an Object通过对象索引
【发布时间】:2014-04-24 15:58:34
【问题描述】:

所以我有一个数据网格。当双击一行时,值将传递给 MVVM。

列表实现:

private List<Object> _AllQueries { get; set; }
public List<Object> AllQueries { get { return _AllQueries; } set { _AllQueries = value; this.NotifyOfPropertyChange(() => AllQueries); } }

数据网格实现:

<telerik:RadGridView SelectedItem="{Binding SelectedItem}" ItemsSource="{Binding AllQueries, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="True">

SelectedItem的实现

public Object SelectedItem { get; set; }

当我在使用 SelectedItem 的位置放置断点时,它工作得很好,值正在被引入。但我的问题是我如何与ColumnsProperties 互动

using (var ctx = DB.Get()) i = ctx.Interactions.Find(SelectedItem2);

SelectedItem 的示例:

Id = 200
Date = 4/24/2014
Name = "Billy Bob"

有没有办法通过对象的属性进行索引,比如 SelectedItem[0] 会给我 ID 号。

【问题讨论】:

  • 为什么你首先有object 的列表?您应该有一个实际对象定义的列表,以便您可以从中访问实际字段。
  • 没有对象定义,因为对象不明确。它们具有不同的值,一次迭代可能是日期名称,接下来是主题和日期
  • 如果您不知道那里有什么数据,您打算如何有意义地使用这些数据?
  • 第一列总是ID,但其他列总是模棱两可,我不需要知道其他的。
  • 那么所有的对象都应该实现一个定义Id成员的接口。

标签: c# xaml


【解决方案1】:

鉴于您的this comment

第一列总是ID,但其他列总是模棱两可,我不需要知道其他任何内容。

您只需要一种访问对象列表的 ID 的方法,其中每个对象都有一个 ID 属性。您应该使用接口来执行此操作。您应该确保查询结果中的每个对象都实现一个定义 ID 属性的接口,并确保所有查询结果都实现该接口。将列表更改为该接口的列表,而不是对象列表。

【讨论】:

  • 这个实现的唯一问题是它可能会显示我不需要的其他“列”。因此,如果我创建一个名为 AllQueryClass 的接口类,它具有所有属性并绑定到 AllQueryClass,如果不使用它们,它将显示带有空白的额外信息。我考虑过这种方法。
  • @user3276954 我绝不会告诉你创建这样的类型。我告诉过你创建一个只有 ID 属性的接口,代表所有可能查询的所有各种对象都将实现该接口。
  • 我不明白为什么我必须使用这种方法,显然问题是询问如何遍历对象属性。在下面回答“使用反射”感谢您的输入绝对让我可以从不同的角度查看它
  • @user3276954 对于设计良好的解决方案,这是解决问题的适当方法。您所描述的情况正是接口设计要解决的情况。反射是一个不太适合这项任务的工具。
  • 你能不能把这个“接口”方法转发给我,我的选择仍然是开放的。如果我能对它做更多的研究并获得更多的知识,也许我会摇摆不定
【解决方案2】:

对于返回的通用对象,您希望to try Reflection 查看那里有哪些属性,然后获取您想要的属性的值。

编辑:最初误解了这个问题。

【讨论】:

  • @user3276954 “不起作用”是什么意思?有错误吗?它会返回错误的东西吗?
  • 你不能通过这样的对象建立索引。请先尝试
  • @user3276954,您无法通过对象建立索引,因此您对上述术语的使用具有误导性。您可以做的是研究它并构建一个,您可以通过采用我现在编辑的答案中的方法进行迭代。
  • 对不起,如果您误解了这个问题。
  • @user3276954,它发生了。只需使用链接答案中的代码,而不是将结果写到控制台,将它们包含在称为Dictionary&lt;string, object&gt;ObjectMap 中,然后使用var id = (int) ObjectMap["Id"] 之类的东西获取Id 属性或无论您希望自己的 id 是什么类型。
猜你喜欢
  • 2019-01-11
  • 1970-01-01
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多