0

我为 monodroid 创建了一个自定义控件。按照教程N-20 CustomControl和这个MvxListView因为我的控件绑定了一个 IEnumerable。我的控件继承到 FrameLayout,然后我无权从父类访问适配器属性。

当我分配 List 绑定属性并调用 RaisePropertyChanged 事件时。不起来。我怎样才能做到这一点?

提前致谢。

编辑以显示代码

说话很便宜,我显示代码。

这是自定义控件的标题和绑定列表。

    public class DrawingBoardControl : View
    {        

    private DrawingItems m_drawingItems;

    [MvxSetToNullAfterBinding]
    public DrawingItems CanvasItems
    {
        get
        {
            return m_drawingItems;
        }

        set
        {
            m_drawingItems = value;
            this.Update();
        }
    }
    ...

我使用一个名为“DrawingItems”的类,有

    public class DrawingItems : IEnumerable<IDrawingElement>
    {
    private List<IDrawingElement> myDrawingItems = new List<IDrawingElement>();

    public IEnumerator<IDrawingElement> GetEnumerator()
    {
        return myDrawingItems.GetEnumerator();
    }

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
    {
        return this.GetEnumerator();
    }

    public void Add(IDrawingElement element)
    {
        myDrawingItems.Add(element);
    }
  }

但是,在其他自定义控件中,我使用了 IEnumerable 和通用列表,并且问题仍然存在。

当我在 ViewModel 中使用 RaisePropertyChanged 时,Items 属性不会引发。

抱歉昨天没有提供更多信息

4

1 回答 1

2

对于不完整的问题,总会有一些答案:

如果您无法访问父级的适配器,则父级必须设置子级的上下文。没有更多的选择。通过公开完整的接口使您的自定义控件完全可绑定。该列表必须为列表项提供上下文。

不知何故,自定义控件绑定到 IEnumerable 感觉非常错误。用于显示列表项的自定义控件,我可以理解,但不适用于列表。但当然可以。但是您最终会设置对容器类的引用,并设置每个项目的数据上下文或视图模型。

但是,如果您希望其他人提供帮助,请提供更多信息。

更新:然后我也更新:)这提供了一些问题的线索:

不要分配新列表,而是从 ObservableCollection 继承 this,或者在 setter 中使用正确的参数手动调用 raiseProperty。我认为这是设计分配一个新列表不会调用 PropertyRaised。

作为“应用为王”的规则:在这种情况下,我自己通知属性已更改。它可能与弱引用问题有关(请参阅 ListItem 属性上的属性)。

于 2013-09-18T09:34:21.527 回答