禁用将项添加到集合

Won*_*ane 3 c# collections wpf mvvm

我确信这是一个"简单"的答案,但目前它逃脱了我.

在MVVM应用程序中,我有一个ObservableCollection属性,用于在视图上显示一些元素集.

private readonly ObservableCollection<MyType> mMyCollection = 
    new ObservableCollection<MyType>();
public ObservableCollection<MyType> MyCollection
{
    get { return mMyCollection; }
}
Run Code Online (Sandbox Code Playgroud)

我想限制此集合的使用者只需使用该属性添加到集合(即我想从视图中阻止这种情况):

   viewModel.MyCollection.Add(newThing);   // want to prevent this!
Run Code Online (Sandbox Code Playgroud)

相反,我想强制使用一个方法来添加项目,因为可能有另一个线程使用该集合,我不想在该线程处理它时修改该集合.

public void AddToMyCollection(MyType newItem)
{
    // Do some thread/task stuff here
}
Run Code Online (Sandbox Code Playgroud)

Han*_*son 7

在将您的收藏ReadOnlyCollection提供给客户之前将其包裹在一起,因为您仍然可以对其进行非读取引用,您可以更改它,他们会看到更改,但无法更改它.请看这里的样本.