不带适配器的定制控制绑定列表

时间:2013-09-17 09:42:26

标签: xamarin.android mvvmcross

我为monodroid创建了一个自定义控件。在教程N-20 CustomControl和此MvxListView之后,因为我的控件绑定了IEnumerable。 我的控件继承到FrameLayout,然后我无法从Parent Class访问Adapter属性。

当我分配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和泛型List并且问题仍然存在。

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

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

1 个答案:

答案 0 :(得分:2)

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

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

以某种方式绑定到IEnumerable的自定义控件感觉非常错误。用于显示列表项的自定义控件,我可以理解,但不能用于列表。但当然可以做到。但是您最终会设置对容器类的引用,并设置每个项目的datacontext或viewmodel。

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

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

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

由于'App is King'规则:在这种情况下,我自己通知了propertychanged。它可能与弱引用问题有关(请参阅ListItem属性上的属性)。