Не можна.
Бо фраза:
чи можна робити біндінг даних в XAMLНе підлягає розумінню.
Що саме не зрозуміло?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Повідомлення користувача Олександр Ковальчук
Не можна.
Бо фраза:
чи можна робити біндінг даних в XAMLНе підлягає розумінню.
Що саме не зрозуміло?
Вітаю.
Маю питання що до використання бази даних в WPF проекті з використанням патерну MVVM.
Питання полягає в тому чи можна робити біндінг даних в XAML напряму з класів Entity?
Можна не в розумінні чи буде працювати (звичайно буде) але чи правильний такий підхід в плані архітектури?
Чи все такі потрібно створювати проміжні класи (EntityVM) для роботи в WPF?
Я не знаю ... може так працює безкоштовна версія ГПТ але вона дуже часто пише дурниці.
При написанні sql запиту може звязувати таблиці між якими і близько немає звязку.
А потім тільки сипле вибаченнями і далі лабуду пише...
безкоштовна версія ґпт написав:unique ([DiscId]), -- Ensure unique DiscId
Це не позволить на диск додати більше однієї мелодії....
ГПТ ще той хуліган....
безкоштовна версія ґпт написав:unique ([SingerId], [StyleId]) -- Ensure unique combination of SingerId and StyleId
Це означає що не може бути дві пісні одного виконавця з однаковим жанром...
Ставити питання (про завдання) на якомусь форумі є як мінімум не ефективно.
Я згідний..але задаю тут це питання бо думав що може я чогось не розумію...не бачу рішення.
Так отож...я не впевненний що умова задачі правильна...
В нас таке буває...думай над вирішенням на додаток думай чи правильна умова.
1. Про музичному диску: назва диска, виконавець, дата випуску, стиль, видавець
Я зробив такий висновок з того що сказано саме виконавець - тобто один виконавець.
Те саме й про стиль...
Воно то так....але тоді виходить що стиль пісні буде залежати від діску на якому вона записана....
І пошук пісень певного виконавця буде відбуватися через диск. Якщо видалити диск то видаляться і звязки виконавця і пісні.
Всім привіт !
Маю завдання:
Створіть базу даних «Музична колекція». База даних повинна містити інформацію по музичних дисках, виконавців, стилях. Необхідно зберігати наступну інформацію:
1. Про музичному диску: назва диска, виконавець, дата випуску, стиль, видавець
2. Про стилях: назви стилів
3. Про виконавців: назва
4. Про видавців: назва, країна
5. Про пісні: назва пісні, назва диска, тривалість пісні, музичний стиль пісні, виконавець.
Реалізував так:
use master
go
if db_id('Music_Library') is not null
begin
drop database [Music_Library]
end
go
create database [Music_Library]
go
use [Music_Library]
go
create table [Styles]
(
[Id] int primary key identity not null,
[Name] nvarchar(256) not null check([Name] <> '') unique
);
go
create table [Singers]
(
[Id] int primary key identity not null,
[Name] nvarchar(256) not null check([Name] <> '') unique,
);
go
create table [Countries]
(
[Id] int primary key identity not null,
[Name] nvarchar(256) not null check([Name] <> '') unique
);
go
create table [Publishers]
(
[Id] int primary key identity not null,
[Name] nvarchar(256) not null check([Name] <> '') unique,
[CountrieId] int not null references [Countries](Id)
);
go
create table [Discs]
(
[Id] int primary key identity not null,
[Name] nvarchar(max) not null check([Name] <> ''),
[Date] date not null check(date <= getdate()),
);
go
create table [DiscsPublishers]
(
[PublisherId] int not null references [Publishers](Id),
[DiscId] int not null references [Discs](Id),
primary key ( [PublisherId],[DiscId])
);
go
create table [Songs]
(
[Id] int primary key identity not null,
[Name] nvarchar(max) not null check([Name] <> ''),
[SingerId] int not null references [Singers](Id),
[StyleId] int not null references [Styles](Id)
);
go
create table [DiscsSongs]
(
[SongId] int not null references [Songs](Id),
[DiscId] int not null references [Discs](Id),
primary key ( [SongId],[DiscId])
);
go
Але є одна проблема.В завданні сказано що на диску має бути один виконавець і один стиль музики.
А в такому варіанті в диск можна додати будь яку пісню.
Як заборонити додавати до диску пісні з іншим виконавцем чи стилем?
cheappi386 написав:якщьо не обмазати get;set то не буде працювати зі структурами. Потрібно починати з цього.
Якщо не хочете обмазувати, то пишіть власні методи серіалізації, десеріалізації.
А можна з цього моменту з подробицями?
Вже замучився з тими серіалізаторами....то приват не серіалізує ... то вимахуються постійно.
Знайшов один більш менш норм. варіант через DataContractSerializer і Iserializable інтерфейс ітой нормально працює тільки в xml...
Олександр Ковальчук написав:Для чого delete[ ] p[ i ] ? там вказівник на об'єкт а не на масив.
Як саме ви цей об'єкт створюєте? Я щось його не бачу в коді.
Якщо це вказівник на об'єкт, тоді вказівник на вказівник зайвий.Через те і питаю, як ви створювали цей об'єкт? За допомогою оператора new?
operator new, operator new[]
operator delete, operator delete[]
Вказівник не зайвий бо там масив абстрактного типу baseAbstract.
baseAbstract * marr = new baseAbstract[size]{} не буде працювати...не можливо створити масив абстрактних класів.
У першому прикладі (доволі невдалому) подвійний вказівник не на двовимірний масив, а на масив поліморфних об'єктів. Але це не має вже значення, бо питання було в іншому.
Саме так.
Вибачте за невдалий приклад.
Морочу голову людям.
Олександр Ковальчук написав:Доброго дня.
Діло в тому що в подальшому можна написати слідуюче:MyClassArr marr(6); baseAbstract * mclass = _arr.getMyClass(3); delete mclass;
В останньому рядку було видалено елемент масиву.... а клас MyClassArr про це навіть не "здогадується"....
Це не так. Він не є елементом масиву.
По-перше, baseAbstract * mclass - буде створено у СТЕКУ.
По-друге, baseAbstract * mclass = marr.getMyClass(3); присвоїть цій ділянці пам'яті адресу із КУПИ. В даному випадку 4-го (4-1=3) елементу масиву вказівників - marr. Аж ніяк не буде навпаки.
Тут чесно кажучи нічого не зрозумів....
По-перше, baseAbstract * mclass - буде створено у СТЕКУ.
I?
По-друге, baseAbstract * mclass = marr.getMyClass(3); присвоїть цій ділянці пам'яті адресу із КУПИ. В даному випадку 4-го (4-1=3) елементу масиву вказівників - marr. Аж ніяк не буде навпаки.
???? Ну...так 0..1..2..3 четвертий елемент в масиві під індексом 3....а що не так?
І не адресу із купи а вказівник із масиву на виділену ділянку пам'яті...
Для чого delete[ ] p[ i ] ? там вказівник на об'єкт а не на масив.
Як саме ви цей об'єкт створюєте? Я щось його не бачу в коді.
Його в коді немає бо питання було не про ініціалізацію масиву і видалення пам'яті...а про порушеня інкапсуляції.
Це не так....
Вибачте ... але це був просто приклад коду і до того ж з помилкою.
Там має бути масив абстрактного класу. І так не дописав видалення масиву. Питання було не в тому.
Ініціалізацію масиву не писав...замінив рисочками....код для прикладу.
Вже виправив.
for (size_t i = 0; i < s; ++i) if (p[i]) delete[] p[i], p[i] = nullptr; /* ... */ delete[] p;.
А ось тут не зрозумів....
Для чого delete[ ] p[ i ] ? там вказівник на об'єкт а не на масив.
Якби це був двувимірний масив тоді видаляти саме так.
for (size_t i = 0; i < s; ++i)
if (p [i ])
delete p[ i ], p[ i ] = nullptr;
/* ... */
delete[ ] p;.
Так має бути...
Тут я мав написати всі const (до * і після *), але чомусь я затупив.
Зрозуміло....
У першому випадку буде додаткове звернення до пам'яті, у другому - використаний один зайвий регістр процесора.
Ясно...
(це round?)
Так...поправив...
Якщо хочете суворо без порушення інкапсуляції - зробіть в Troops і CombatVehicle методи
Було б добре...але методи прописані в завданні:
• IsDestroyed () – перевіряє чи машина знищена (true/false) відповідно до рівня health
• ShowInfo () – відображає всю актуальну інформацію
• Attack () = 0 – виконує атаку (повертається кількість нанесеного урону)
• Defense (damage) = 0 – виконує оборону від атаки, приймаючи нанесений урон
Для проведення раунда створити окрему функцію Round (bm1, bm2)
Загальна порада: замість масивів використовуйте вектори, а замість звичайних вказівників - розумні вказівники, скажімо, std::shared_ptr чи std::unique_ptr, по ситуації
Згідний...але поки ще рано...
А от HANDLE тут явно надлишковий.
Я розумію...але не хочеться писати окрему систему....як для домашки і так згодиться...
Якщо Base та MyClass немає «спільного» інтерфейсу? У вас немає віртуальних методів, відповідно віртуальної таблиці у вас теж не буде. Який сенс так писати?
Це був просто приклад...я розумію що в такому записі сенсу не багато....
Просто .... якось викладач не нароком зовсім випустив таку "мізерну" деталь як віртуальний деструктор.
Через те допитуюсь.
float get_sum_of_array(float *const arr, int const count) {
float sum = 0.f;
for(int i = 0; i < count; ++i)
sum += arr[i];
return sum;
}
А чому саме float *const arr?
Чому не const float* arr?