Привет, мне нужно показать список доставок в DataGrid, используя MVVM и Entity Framework в приложении WPF. У каждой доставки есть назначенный Курьер, которого можно изменить через диалоговое окно EditWindow. Все работает хорошо, вся информация о доставке, например имя, правильно сохраняется в базе данных сразу после вызова SaveChanges и обновляется в DataGrid. Единственная проблема заключается в том, что при изменении назначенного курьера на другого имя курьера не обновляется в DataGrid. Я добавил столбец с данными CourierUid для целей тестирования, но даже это свойство не обновляется в DataGrid. Но он также правильно сохраняется в базе данных, и, конечно же, вся информация обновляется после повторного открытия моего приложения. Понятия не имею, что я делаю не так.
Вот код:
Delivery.cs
public class Delivery : INotifyPropertyChanged
{
string nameDelivery = string.Empty;
string? courierUid = null;
public string DeliveryUid { get; set; } = Guid.NewGuid().ToString();
public string NameDelivery
{
get { return nameDelivery; }
set
{
nameDelivery = value;
OnPropertyChanged("NameDelivery");
}
}
public string? CourierUid
{
get { return courierUid; }
set
{
courierUid = value;
OnPropertyChanged("CourierUid");
OnPropertyChanged("NameCourierFull");
}
}
public Courier? Courier { get; set; }
public string NameCourierFull { get { return Courier?.NameCourierFull ?? string.Empty; } }
public event PropertyChangedEventHandler? PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
}
}
Courier.cs
public class Courier : INotifyPropertyChanged
{
string nameFirst = string.Empty;
string nameSecond = string.Empty;
string nameThird = string.Empty;
public string CourierUid { get; set; } = Guid.NewGuid().ToString();
public string NameFirst
{
get { return nameFirst; }
set
{
nameFirst = value;
OnPropertyChanged("NameFirst");
OnPropertyChanged("NameCourierFull");
}
}
public string NameSecond
{
get { return nameSecond; }
set
{
nameSecond = value;
OnPropertyChanged("NameSecond");
OnPropertyChanged("NameCourierFull");
}
}
public string NameThird
{
get { return nameThird; }
set
{
nameThird = value;
OnPropertyChanged("NameThird");
OnPropertyChanged("NameCourierFull");
}
}
public string NameCourierFull => $"{NameFirst} {NameSecond} {NameThird}";
public ICollection Deliveries { get; set; } = [];
public event PropertyChangedEventHandler? PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
}
}
DeliveryViewModel.cs (здесь важна только команда редактирования, файл слишком большой)
public RelayCommand EditDeliveryCommand
{
get
{
return editDeliveryCommand ??=
new RelayCommand((selectedItem) =>
{
if (selectedItem is not Delivery dbDelivery) return;
Delivery delivery = new()
{
DeliveryUid = dbDelivery.DeliveryUid,
NameDelivery = dbDelivery.NameDelivery,
CourierUid = dbDelivery.CourierUid
};
WindowEditDelivery window = new(delivery, Couriers);
if (window.ShowDialog() == true)
{
dbDelivery.NameDelivery = delivery.NameDelivery;
Courier? courierNew = db.Couriers.FirstOrDefault(c => c.CourierUid == delivery.CourierUid);
dbDelivery.Courier = courierNew;
db.Entry(dbDelivery).State = EntityState.Modified;
db.SaveChanges();
}
}
);
}
}
WindowEditDelivery.xaml (диалоговое окно для редактирования доставки)
OK
Отмена
WindowEditDelivery.cs
public partial class WindowEditDelivery : Window
{
public Delivery Delivery { get; private set; }
public WindowEditDelivery(Delivery delivery, ObservableCollection Couriers)
{
InitializeComponent();
Delivery = delivery;
DataContext = Delivery;
ComboBoxCourier.ItemsSource = Couriers;
}
private void Accept_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
}
}
MainWindow.xaml
MainWindow.cs
public partial class MainWindow : Window
{
private DeliveryViewModel context;
public MainWindow()
{
InitializeComponent();
context = new DeliveryViewModel();
DataContext = context;
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... f-datagrid
Обновление внешних ключей и связанных с ними вещей в WPF DataGrid ⇐ C#
Место общения программистов C#
-
Anonymous
1735146852
Anonymous
Привет, мне нужно показать список доставок в DataGrid, используя MVVM и Entity Framework в приложении WPF. У каждой доставки есть назначенный Курьер, которого можно изменить через диалоговое окно EditWindow. Все работает хорошо, вся информация о доставке, например имя, правильно сохраняется в базе данных сразу после вызова SaveChanges и обновляется в DataGrid. Единственная [b]проблема[/b] заключается в том, что при изменении назначенного курьера на другого имя курьера не обновляется в DataGrid. Я добавил столбец с данными CourierUid для целей тестирования, но даже это свойство не обновляется в DataGrid. Но он также правильно сохраняется в базе данных, и, конечно же, вся информация обновляется после повторного открытия моего приложения. Понятия не имею, что я делаю не так.
Вот код:
Delivery.cs
public class Delivery : INotifyPropertyChanged
{
string nameDelivery = string.Empty;
string? courierUid = null;
public string DeliveryUid { get; set; } = Guid.NewGuid().ToString();
public string NameDelivery
{
get { return nameDelivery; }
set
{
nameDelivery = value;
OnPropertyChanged("NameDelivery");
}
}
public string? CourierUid
{
get { return courierUid; }
set
{
courierUid = value;
OnPropertyChanged("CourierUid");
OnPropertyChanged("NameCourierFull");
}
}
public Courier? Courier { get; set; }
public string NameCourierFull { get { return Courier?.NameCourierFull ?? string.Empty; } }
public event PropertyChangedEventHandler? PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
}
}
Courier.cs
public class Courier : INotifyPropertyChanged
{
string nameFirst = string.Empty;
string nameSecond = string.Empty;
string nameThird = string.Empty;
public string CourierUid { get; set; } = Guid.NewGuid().ToString();
public string NameFirst
{
get { return nameFirst; }
set
{
nameFirst = value;
OnPropertyChanged("NameFirst");
OnPropertyChanged("NameCourierFull");
}
}
public string NameSecond
{
get { return nameSecond; }
set
{
nameSecond = value;
OnPropertyChanged("NameSecond");
OnPropertyChanged("NameCourierFull");
}
}
public string NameThird
{
get { return nameThird; }
set
{
nameThird = value;
OnPropertyChanged("NameThird");
OnPropertyChanged("NameCourierFull");
}
}
public string NameCourierFull => $"{NameFirst} {NameSecond} {NameThird}";
public ICollection Deliveries { get; set; } = [];
public event PropertyChangedEventHandler? PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string prop = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));
}
}
DeliveryViewModel.cs (здесь важна только команда редактирования, файл слишком большой)
public RelayCommand EditDeliveryCommand
{
get
{
return editDeliveryCommand ??=
new RelayCommand((selectedItem) =>
{
if (selectedItem is not Delivery dbDelivery) return;
Delivery delivery = new()
{
DeliveryUid = dbDelivery.DeliveryUid,
NameDelivery = dbDelivery.NameDelivery,
CourierUid = dbDelivery.CourierUid
};
WindowEditDelivery window = new(delivery, Couriers);
if (window.ShowDialog() == true)
{
dbDelivery.NameDelivery = delivery.NameDelivery;
Courier? courierNew = db.Couriers.FirstOrDefault(c => c.CourierUid == delivery.CourierUid);
dbDelivery.Courier = courierNew;
db.Entry(dbDelivery).State = EntityState.Modified;
db.SaveChanges();
}
}
);
}
}
WindowEditDelivery.xaml (диалоговое окно для редактирования доставки)
OK
Отмена
WindowEditDelivery.cs
public partial class WindowEditDelivery : Window
{
public Delivery Delivery { get; private set; }
public WindowEditDelivery(Delivery delivery, ObservableCollection Couriers)
{
InitializeComponent();
Delivery = delivery;
DataContext = Delivery;
ComboBoxCourier.ItemsSource = Couriers;
}
private void Accept_Click(object sender, RoutedEventArgs e)
{
DialogResult = true;
}
}
MainWindow.xaml
MainWindow.cs
public partial class MainWindow : Window
{
private DeliveryViewModel context;
public MainWindow()
{
InitializeComponent();
context = new DeliveryViewModel();
DataContext = context;
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79308057/refreshing-foreign-keys-and-related-stuff-in-wpf-datagrid[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия