Отображение сведений об объекте выбранного объекта в другом пользовательском элементе управления с использованием MVVMC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Отображение сведений об объекте выбранного объекта в другом пользовательском элементе управления с использованием MVVM

Сообщение Anonymous »

У меня есть список людей, заполненный из базы данных, два поля (id, имя) из объекта человека привязаны к данным с помощью переключателя, теперь, когда я нажимаю на переключатель, я открываю новый UserControl и пытаюсь показать все поля выбранного объекта в UserControl подробно.
как это реализовать в mvvm?

PersonModel:

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

    namespace Persons.Models
{
class PersonModel
{
public int PersonID { get; set; }
public string Name { get; set; }
public string Surname {get; set; }
public string PersonAge { get; set; }
public string PersonAddress { get; set; }
public string PersonDepartmentID{ get; set; }
public string PersonGroupID{ get; set; }
public string PersonContact{ get; set; }
public string PersonLevelEductationID{ get; set; }
public string PersonDivisionID{get; set; }

public ObservableCollection
 Get()
{
ObservableCollection Person_list = new ObservableCollection();
var Connect = ConfigurationManager.ConnectionStrings["MysqlConnection"].ConnectionString;
using (var conn = new MySqlConnection(Connect))
using (var command = new MySqlCommand())
{
conn.Open();
command.Connection = conn;
command.CommandText = @"SELECT person.id, person.name, person.surname, person.address, person.age, person.contact department.name AS 'department', group.name AS 'group', eductation.lavel division.name AS 'division' FROM person
LEFT JOIN department ON department.id = person.departmentID LEFT JOIN group ON group.id = person.groupID LEFT JOIN eductation ON eductation.id = person.eductationLavelID LEFT JOIN division ON division.id = person.divisionID";
MySqlDataReader reader = command.ExecuteReader();
while (reader.Read())
{
Person_list.Add(new PersonModel()
{
PersonID = (int)reader["id"],
Name = (string)reader["name"],
Surname = (string)reader["surname"],
PersonAge = (int)reader["age"],
PersonAddress = (string)reader["address"],
PersonDepartmentID = (string)reader["department"],
PersonGroupID= (string)reader["group"],
PersonContact = (string)reader["contact"],
PersonLevelEductationID = (string)reader["lavel"],
PersonDivisionID = (string)reader["division"]
}
) ;
}
reader.Close();
conn.Close();
}
return Person_list;
}
}
}
Модели просмотра

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

namespace Persons.ViewModels
{
class PersonViewModel : ViewModelBase
{
private ObservableCollection
 _personList;
private readonly PersonModel _person_Model;

public ObservableCollection PersonItems
{
get => _personList;
set
{
if (_personList!= value)
{
_personList = value;
OnpropertyChanged(nameof(PersonItems));
}
}
}

public PersonViewModel()
{
_person_Model= new PersonModel();
_personList= _person_Model.Get();
}
}
Основной пользовательский элемент управления:

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

 



 _selectedViewModel;
set { _selectedViewModel = value; OnPropertyChanged("SelectedViewModel"); }
}
public void CrudView()
{
SelectedViewModel = new CrudPage();    // new usercontrol
}
private ICommand _CrudCommand;
public ICommand ShowPageCommand
{
get
{
if (_CrudCommand == null)
{
_CrudCommand = new RelayCommand(param => CrudView());
}
return _CrudCommand;
}
}

// Close App
public void CloseApp(object obj)
{
MainWindow win = obj as MainWindow;
win.Close();
}

// Close App Command
private ICommand _closeCommand;
public ICommand CloseAppCommand
{
get
{
if (_closeCommand == null)
{
_closeCommand = new RelayCommand(p => CloseApp(p));
}
return _closeCommand;
}
}
}
Класс RelayCommand

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

 namespace Persons.Utilities
{
public class RelayCommand : ICommand
{
private Action execute;
private Func canExecute;

public RelayCommand(Action execute)
{
this.execute = execute;
canExecute = null;
}

public RelayCommand(Action execute, Func canExecute)
{
this.execute = execute;
this.canExecute = canExecute;
}

public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}

public bool CanExecute(object parameter)
{
return canExecute == null || CanExecute(parameter);
}

public void Execute(object parameter)
{
execute(parameter);
}
}
Прошу прощения за длинный код!

Подробнее здесь: https://stackoverflow.com/questions/787 ... using-mvvm
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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