我希望有一个大师可以帮助我解决这个问题。
我正在为windows ce移动设备创建自定义控件。我创建了一个属性,以便用户可以将任何源绑定到我的控件。我需要迭代源并获取显示成员路径的项值。
我声明我的源,然后创建属性。在构造中,如果源更改,我会注册一个事件,以便我可以再次开始绘制我的对象。这是我第一次从这个角度使用绑定源。我错过了什么或使用错了吗?这是一些代码片段
private BindingSource _bindingCollection;
public object DataSource
{
set { _bindingCollection.DataSource = value; }
}
public string DisplayMemberPath { get; set; }
ctor()
{
_bindingCollection.DataSourceChanged += _bindingCollection_DataSourceChanged;
}
void _bindingCollection_DataSourceChanged(object sender, EventArgs e)
{
foreach (var item in _bindingCollection)
{
//I am stuck here on getting the value from the item that is
// specified by DisplayMemberPath to paint my objects on the control
//I can only paint on the control and cannot add any controls to it.
//So here a method is called with the value as a parameter and the
//Graphics object will draw the string
}
}
先谢谢。
此致 里安
编辑:
老兄,我知道你用油漆方法画画,这是我想做的一个例子。我从头开始创建所有内容,整个控件都是从代码中提取的,我覆盖了所有需要的事件。也许在DisplayMemberPath中设置_bindingCollection.DataMember?那么在迭代源时会给出项目吗?现在测试并发布答案是否有效。请不要再发表评论或回答告诉我在油漆或类似的东西上使用。专注于从集合中获取显示成员值的问题:)
编辑:找到答案 对不起,这实际上是一个非常愚蠢的问题,我在忙着做很多事情的时候问过。这实际上很容易获得房产价值。
for (int index = 0; index < _bindingCollection.Count; index++)
{
var propertyValue = _bindingCollection[index].GetType().GetProperty(DisplayMemberPath ).GetValue(_bindingCollection[index], null);
// Can do anthing now with the value here or just create a
//method of returning this value with this line of code on top.
}
如果有人需要删除该问题,可以删除该问题。如果还有其他人匆忙寻求这个解决方案并且不知道如何获得它,我会留在这里。这些只是代码片段,而不是可以使用的任何方法。
答案 0 :(得分:1)
我只是将问题标记为已回答。阅读我的编辑,看看我的愚蠢思维错误以及为什么这很容易。
我会留下那些可能去和我一样思考并且不必要地挣扎的人,除非有人觉得必须删除这个问题你可以直接前进。