Я думаю, что происходит то, что свойство IsReadOnly
делает DataGrid
доступным только для чтения через DefaultView для persons
, и поскольку этот DefaultView будет одинаковым для обоих ваших DataGrid's
, оба теряют способностьдобавить новые строки.
Однако оба не становятся доступными только для чтения (как вы сказали в своем вопросе), поэтому я не уверен, является ли это ошибкой или желаемым поведением.
I 'Я также не уверен, что происходит за кулисами, что вызывает такое поведение, но вы можете проверить, что CollectionView одинаковы с помощью отладчика (так как свойство CollectionView является частным).Следующие три утверждения выглядят как истинные
dgA.Items.CollectionView == CollectionViewSource.GetDefaultView(persons) // true
dgB.Items.CollectionView == CollectionViewSource.GetDefaultView(persons) // true
dgA.Items.CollectionView == dgB.Items.CollectionView // true
Вы можете заставить его работать так, как вам нравится, изменив List
на ObservableCollection
и использовать отдельный ListViewCollection's
для вашего DataGrid's
public MainWindow()
{
InitializeComponent();
ObservableCollection<Person> persons = new ObservableCollection<Person>();
persons.Add(new Person() { FirstName = "Bob", LastName = "Johnson" });
persons.Add(new Person() { FirstName = "John", LastName = "Smith" });
dgA.ItemsSource = new ListCollectionView(persons);
dgB.ItemsSource = new ListCollectionView(persons);
}