WPF MVVM: просмотр XAML выдает исключение времени выполнения при создании экземпляра окна управления запасамиC#

Место общения программистов C#
Ответить
Anonymous
 WPF MVVM: просмотр XAML выдает исключение времени выполнения при создании экземпляра окна управления запасами

Сообщение Anonymous »

Я создаю приложение WPF для управления запасами, но у меня возникли проблемы с созданием представлений. Я использую шаблон MVVM и получаю сообщение об ошибке при создании экземпляра XAML-файла Views.
Было бы очень полезно, если бы вы рассказали мне, как это исправить или нужно ли мне изменить какую-либо часть моего кода.
. В представлении пользователя я получаю следующую ошибку в предыдущей строке: Ошибка экземпляра XDG0003. Это не позволяет мне просмотреть предварительный просмотр и запустить приложение. Эта ошибка возникает только в представлениях приложения, и я не знаю, что может быть ее причиной.
UserModel:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WPF_CS_InventoryManager.Models
{
public class UserModel
{
private string _firstname;
private string _lastname;
private string _email;
private string _id;

public string Firstname
{
get => _firstname;
set
{
if (_firstname != value)
{
_firstname = value;
}
}
}
public string Lastname
{
get => _lastname;
set
{
if (_lastname != value)
{
_lastname = value;
}
}
}
public string Email
{
get => _email;
set
{
if (_email != value)
{
_email = value;
}
}
}
public string Id
{
get => _id;
set
{
if (_id != value)
{
_id = value;
}
}
}
}
}
BaseViewModel:

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WPF_CS_InventoryManager.ViewModels
{
internal class BaseViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;

protected virtual void OnPropertyChanged(string propertyName)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
UserViewModel:

Код: Выделить всё

using System.Collections.ObjectModel;
using System.Windows.Input;
using WPF_CS_InventoryManager.Commands;
using WPF_CS_InventoryManager.DataBase;
using WPF_CS_InventoryManager.Models;
using WPF_CS_InventoryManager.Utils;

namespace WPF_CS_InventoryManager.ViewModels
{
internal class UserViewModel : BaseViewModel
{
private readonly BD _bd;
private ObservableCollection _users;
private UserModel _selectedUser;

public UserViewModel()
{
_bd = new BD();
_users = _bd.GetUsers();
_selectedUser = new UserModel();
}

public ObservableCollection Users
{
get => _users;
set
{
if (_users != value)
{
_users = value;
OnPropertyChanged(nameof(Users));
}
}
}

public UserModel SelectedUser
{
get => _selectedUser;
set
{
if (_selectedUser != value)
{
_selectedUser = value;
OnPropertyChanged(nameof(SelectedUser));
}
}
}

// ========== COMMANDS ==========

public ICommand AddCommand => new RelayCommand(AddExecute, CanAddExecute);
public ICommand EditCommand => new RelayCommand(EditExecute, CanEditOrDelete);
public ICommand DeleteCommand => new RelayCommand(DeleteExecute, CanEditOrDelete);
public ICommand ExportPdfCommand => new RelayCommand(_ =>  ExportPdf());

private void AddExecute(object? _)
{
_bd.AddUser(SelectedUser);
Users = _bd.GetUsers();
SelectedUser = new UserModel();
}

private bool CanAddExecute(object? _)
{
// Aquí podrías validar campos requeridos
return !string.IsNullOrWhiteSpace(SelectedUser?.Id);
}

private void EditExecute(object? _)
{
_bd.EditUser(SelectedUser);
Users = _bd.GetUsers();
}

private void DeleteExecute(object? _)
{
_bd.DeleteUser(SelectedUser);
Users = _bd.GetUsers();
SelectedUser = new UserModel();
}

private bool CanEditOrDelete(object? _)
{
return SelectedUser != null && !string.IsNullOrWhiteSpace(SelectedUser.Id);
}

private void ExportPdf()
{
PdfExporter.ExportUsers(Users);
}
}
}
Просмотр пользователя: Ошибка в UserView:
введите здесь описание изображения

Подробнее здесь: https://stackoverflow.com/questions/798 ... ory-manage
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»