我已经使用按钮创建了一个列表框数据,并绑定到文本框。 我希望能够通过水龙头和水龙头移除一个项目。保持。 我的问题:弹出无效的操作异常
这是我的代码
按钮删除=(按钮)发件人;
fileListbox.Items.Remove(remover.Content);
System.InvalidOperationException未处理
Message =只读集合不支持操作。
堆栈跟踪:
àSystem.Windows.Controls.ItemCollection.RemoveImpl(Object value)
àSystem.Windows.Controls.ItemCollection.RemoveInternal(Object value)
àSystem.Windows.PresentationFrameworkCollection1.Remove(Object value)
à proByOrange.views.preDevis.Page1.GestureListener_Tap(Object sender, GestureEventArgs e)
à Microsoft.Phone.Controls.SafeRaise.Raise[T](EventHandler
1 eventToRaise,Object sender,GetEventArgs 1 getEventArgs)
à Microsoft.Phone.Controls.GestureListener.RaiseGestureEvent[T](Func
2 eventGetter,Func`1 argsGetter,Boolean releaseMouseCapture)
àMicrosoft.Phone.Controls.GestureListener.ProcessTouchPanelEvents()
àMicrosoft.Phone.Controls.GestureListener.TouchComplete()
àMicrosoft.Phone.Controls.GestureListener.Touch_FrameReported(Object sender,TouchFrameEventArgs e)
àSystem.Windows.Input.Touch.OnTouch(Object sender,TouchFrameEventArgs e)
àMS.Internal.JoltHelper.RaiseEvent(IntPtr target,UInt32 eventId,IntPtr coreEventArgs,UInt32 eventArgsTypeIndex)
请求帮助
答案 0 :(得分:1)
您正在尝试从ReadOnly集合中删除项目。你不能改变这样的集合。正如您所期望的那样,您只能阅读此类集合,但您无法对其进行更改。
你的标题是指文本框,但你的代码和堆栈跟踪意味着使用ItemsSource。
如果您需要能够更改显示的内容,只需将UI元素设置为只读,并使后备集合可写。
如果您可以显示一些示例代码,我们可以展示如何正确更改它。
答案 1 :(得分:1)
如果你使用ListBox
属性将ItemsSource
绑定到某个地方的某个列表(在视图模型中会很好),正如Matt建议的那样,你的问题就是这样,那么为了删除一个列表中的项目,从源集合中删除它。如果要修改列表内容,最好的方法是使用ObservableCollection<T>
,这会在集合更改时引发集合更改通知,因此您的UI将自动更新:
public ObservableCollection MyList { get; private set; }
...
// Inside an event handler or view model command handler.
this.MyList.Remove(itemToRemove);