我希望在某个地方有一位大师可以帮助我解决这个问题。
我正在为 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.
}
如果有人需要删除该问题,可以将其删除。如果有其他人急于使用此解决方案并且不知道如何获得它,我会将其留在这里。这些只是代码片段,无论如何都不是可以使用的方法。