Как проектировать правильную архитектуру с помощью паттерна mvvm
Проблема в том что в Models нельзя использовать не ObservableCollection или List я подробно расскажу о проблеме и покажу.
Модель Param-Тут все хорошо я не нарушаю паттерн
public class Param : ChangeProperty
{
string name { get; set; }
string text { get; set; }
public string Name
{
get { return name; }
set
{
name = value;
OnPropertyChanged("Name");
}
}
public string Text
{
get { return text; }
set
{
name = value;
OnPropertyChanged("Text");
}
}
public Param(string name, string text)
{
Name = name;
Text = text;
}
}
Модель Offer-тут уже начнутся проблемы,3-штуки ObservableCollection может сделать этот класс ViewsModels ?
class Offer:ChangeProperty
{
string url { get; set; }
public string Url
{
get { return url; }
set
{
url = value;
OnPropertyChanged("Url");
}
}
decimal price { get; set; }
public decimal Price
{
get { return price; }
set
{
price = value;
OnPropertyChanged("Price");
}
}
string currencyId { get; set; }
public string CurrencyId
{
get { return currencyId; }
set
{
currencyId = value;
OnPropertyChanged("CurrencyId");
}
}
int categoryId { get; set; }
public int CategoryId
{
get { return categoryId; }
set
{
categoryId = value;
OnPropertyChanged("CategoryId");
}
}
public ObservableCollection<string> Picture { get; set; } = new ObservableCollection<string>();
string name { get; set; }
public string Name
{
get { return name; }
set
{
name = value;
OnPropertyChanged("Name");
}
}
string vendor { get; set; }
public string Vendor
{
get { return vendor; }
set
{
vendor = value;
OnPropertyChanged("Vendor");
}
}
public ObservableCollection<string> Description { get; set; } = new ObservableCollection<string>();
public ObservableCollection<Param> Param { get; set; } = new ObservableCollection<Param>();
int stock_quantity { get; set; }
public int Stock_quantity
{
get { return stock_quantity; }
set
{
stock_quantity = value;
OnPropertyChanged("Stock_quantity");
}
}
bool аvailable { get; set; }
public bool Available
{
get { return аvailable; }
set
{
аvailable = value;
OnPropertyChanged("Available");
}
}
int id { get; set; }
public int Id
{
get { return id; }
set
{
id = value;
OnPropertyChanged("Id");
}
}
public Offer(string url, decimal price, string currencyId, int categoryId, string name, string vendor, int stock_quantity, bool available, int id)
{
Url = url;
Price = price;
CurrencyId = currencyId;
CategoryId = categoryId;
Name = name;
Vendor = vendor;
Stock_quantity = stock_quantity;
Available = available;
Id = id;
}
}
Модель Currency-тут нету проблем.
public class Currency:ChangeProperty
{
string id { get; set; }
public string Id
{
get { return id; }
set
{
id = value;
OnPropertyChanged("Id");
}
}
int rate { get; set; }
public int Rate
{
get { return rate; }
set
{
rate = value;
OnPropertyChanged("Rate");
}
}
public Currency(string id, int rate)
{
Id = id;
Rate = rate;
}
}
ViewModel PriceCeatorViewModel-Тут я не нарушаю правила,может Модель Offer сделать ViewModel,потом наследовать PriceCeatorViewModel??
class PriceCeatorViewModel: ChangeProperty
{
string pathFile { get; set; }
public string PathFile
{
get { return pathFile; }
set
{
pathFile = value;
OnPropertyChanged("PathFile");
}
}
string name { get; set; }
public string Name
{
get { return name; }
set
{
name = value;
OnPropertyChanged("Name");
}
}
string сompany { get; set; }
public string Company
{
get { return сompany; }
set
{
сompany = value;
OnPropertyChanged("Company");
}
}
string url { get; set; }
public string Url
{
get { return url; }
set
{
url = value;
OnPropertyChanged("Url");
}
}
string date { get; set; }
public string Date
{
get { return date; }
set
{
date = value;
OnPropertyChanged("Date");
}
}
public ObservableCollection<string> Сategories { get; set; }
public ObservableCollection<Currency> Currencies { get; set; }
public ObservableCollection<Offer> Offers { get; set; }
public PriceCeatorViewModel()
{
PathFile = "Name file";
Сategories = new ObservableCollection<string>();
Currencies = new ObservableCollection<Currency>();
Offers = new ObservableCollection<Offer>();
}
public DelegateCommand OvpenFile
{
get
{
return new DelegateCommand((obj) =>
{
const string Filter = "XML files (*.XML)|*.XML";
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = Filter;
if (dlg.ShowDialog() == true)
{
PathFile = dlg.FileName;
}
});
}
}
}