Всем привет! Я пишу небольшое приложение с использованием DataGrid. Есть класс GmarketObject. В нем я реализовал интерфейсы IEditableObject и INotifyPropertyChanged. Для этого класса создал коллекцию ObservableCollection<GmarketObject>. Ниже сам класс и класс коллекции. | Код | public class GmarketObject : IEditableObject, INotifyPropertyChanged { private int id; private string name; private string who; private Uri link; private double costWon; private double costRu;
//Номер public int ID { get { return id; } set { if (id == value) return; id = value; OnPropertyChanged("ID"); } }
//Название заказа public string Name { get { return name; }
set { if (name == value) return; name = value; OnPropertyChanged("Name"); } }
//Кто заказал public string Who { get { return who; } set { if (who == value) return; who = value; OnPropertyChanged("who"); } }
//Ссылка на страницу с вещью public Uri Link { get { return link; } set { if (link == value) return; link = value; OnPropertyChanged("Link"); } }
//Стоимость Южнокорейских вон public double CostWon { get { return costWon; } set { if (costWon == value) return; costWon = value; OnPropertyChanged("CostWon"); } }
// Стоимость рублей public double CostRu { get { return costRu; } set { if (costRu == value) return; costRu = value; OnPropertyChanged("CostRu"); }
}
#region INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } }
#endregion
#region IEditableObject
private GmarketObject backupCopy; private bool inEdit;
public void BeginEdit() { if (inEdit) return; inEdit = true; backupCopy = this.MemberwiseClone() as GmarketObject; }
public void CancelEdit() { if (!inEdit) return; inEdit = false; this.Name = backupCopy.Name; this.ID = backupCopy.ID; this.Who = backupCopy.Who; this.Link = backupCopy.Link; this.CostWon = backupCopy.CostWon; this.CostRu = backupCopy.CostRu; }
public void EndEdit() { if (!inEdit) return; inEdit = false; backupCopy = null; }
#endregion
}
|
| Код | public class GmarketData : ObservableCollection<GmarketObject> { public GmarketData() {
}
}
|
Разметка Xaml для ДатаГрида: | Код | <---Ресурсы грида--> <Grid.Resources> <local:GmarketData x:Key="gmarketData"/> </Grid.Resources> <DataGrid AutoGenerateColumns="False" ItemsSource="{StaticResource gmarketData}" Height="293" HorizontalAlignment="Left" Margin="33,48,0,0" Name="GmarketGrid" VerticalAlignment="Top" Width="389"> <DataGrid.Columns> <DataGridTextColumn Binding="{Binding ID}" Header="ID" /> <DataGridTextColumn Header="Название" Binding="{Binding Name}" /> <DataGridTextColumn Header="Кто заказал" Binding="{Binding Who}" /> <DataGridTextColumn Header="Ссылка" Binding="{Binding Link}" /> <DataGridTextColumn Header="Цена Won" Binding="{Binding CostWon}" /> <DataGridTextColumn Header="Цена Руб." Binding="{Binding CostRu}" /> </DataGrid.Columns> </DataGrid>
|
Изначально данные ни откуда не загружаются, вводятся с клавы в грид. Мне нужно сохранить все данные из датагрида в ObservableCollection для последующей сериализации. Хочу сделать сохранение, чтобы потом можно было при последующих запусках просто десериализовать коллекцию и добавлять данные в грид, а затем и в коллекцию. Везде есть описание только как загружать данные в датагрид из ObservableCollection. Я пробовал Считывать DataGrid.Items и приводить каждый элемент к своему типу и добавлять его в коллекцию, но выскакивает исключение: Unable to cast object of type 'MS.Internal.NamedObject' to type 'Validation.Course'. Подскажите, может кто знает как все-таки добавить данные в коллекцию.
|