2

我希望在某个地方有一位大师可以帮助我解决这个问题。

我正在为 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.

        }

如果有人需要删除该问题,可以将其删除。如果有其他人急于使用此解决方案并且不知道如何获得它,我会将其留在这里。这些只是代码片段,无论如何都不是可以使用的方法。

4

1 回答 1

1

我只是将问题标记为已回答。阅读我的编辑以了解我的愚蠢思维错误以及为什么它很容易。

我会把帖子留给那些可能和我有同样想法并且无谓地挣扎的人,除非有人觉得必须删除这个问题,你可以继续。

于 2013-04-29T07:09:15.817 回答