我为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属性不会引发。
很抱歉昨天没有提供更多信息
答案 0 :(得分:2)
对于不完整的问题总有一些答案:
如果您无法访问父级的适配器,则父级必须设置子级的上下文。没有更多的选择。通过公开完整的接口使您的自定义控件完全可绑定。该列表必须提供列表项的上下文。
以某种方式绑定到IEnumerable的自定义控件感觉非常错误。用于显示列表项的自定义控件,我可以理解,但不能用于列表。但当然可以做到。但是您最终会设置对容器类的引用,并设置每个项目的datacontext或viewmodel。
但如果您希望其他人提供帮助,请提供更多信息。
更新: 然后我也更新:)这提供了一些问题的线索:
不要分配新列表,而是从ObservableCollection继承它,或者在setter中使用正确的参数手动调用raiseProperty。我认为通过设计分配新列表不会调用PropertyRaised。
由于'App is King'规则:在这种情况下,我自己通知了propertychanged。它可能与弱引用问题有关(请参阅ListItem属性上的属性)。