Модель и модель представления ViewModel MVFM WPF - PullRequest
0 голосов
/ 08 января 2019

Я хочу прочитать некоторые данные из базы данных и выполнить некоторые операции с ними, а затем просмотреть их в представлении. Я много читал о MVVM, и теперь я в замешательстве. Изображения Я читаю сущность человека из базы данных с атрибутом Name.

пожалуйста, сделайте небольшой код и покажите мне, как мне сделать мою модель и ViewModel. Я думаю, это будет что-то вроде этого:

    public class PersonModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private string Name;
        public string name
        {
            get
            {
                return Name;
            }
            set
            {
                Name = value;
                onpropertychanged("name");
            }


        }
        public PersonModel( string s)
        {
            name = s;
        }

        public void onpropertychanged(string PName)
        {
            if (PropertyChanged !=null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(PName));
            }
        }
    }

public  class PersonViewModel
    {
        public ObservableCollection <PersonModel> list { get; set; }

        public PersonViewModel()
        {
            list = new ObservableCollection<model>();
            list.Add(new model("abc"));
            list.Add(new model("def"));
       }

       public void change()
        {
            list[1].name = "changed";
        }

    }


public  class ViewModelBase
    {
        public PersonViewModel vperson { get; set; }
        public ViewModelBase()
        {
            vperson = new PersonViewModel();
            vperson.change();
        }
    }

Редактировать: где должны быть соединения с базой данных?

Редактировать:

    <Grid>
        <TextBox Text="{Binding vperson.list[1].name}" />
    </Grid>
</Window>

1 Ответ

0 голосов
/ 08 января 2019

Я редактировал ваши классы и работает

public class PersonModel : INotifyPropertyChanged
{
    private string _name;

    public string Name
    {
        get => _name;
        set
        {
            if (_name == value) return;

            _name = value;
            OnPropertyChanged();
        }
    }

    public PersonModel(string name)
    {
        _name = name;
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged([CallerMemberName]string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

public class PersonViewModel
{
   public ObservableCollection<PersonModel> Items { get; set; }

   public PersonViewModel()
   {
       Items = new ObservableCollection<PersonModel> { new PersonModel("abc"), new PersonModel("def") };
   }

   public void Change()
   {
       Items[1].Name = "changed";
   }
}

public class ViewModelBase
{
    public PersonViewModel PersonViewModel { get; set; }

    public ViewModelBase()
    {
        PersonViewModel = new PersonViewModel();
        PersonViewModel.Change();
    }
}

//Use the dataContext in this way, will help you with the strong type
xmlns:viewModels="clr-namespace:WpfApp1.ViewModels"

<Window.DataContext>
    <viewModels:ViewModelBase />
</Window.DataContext>
<Grid>
    <TextBox Text="{Binding PersonViewModel.Items[1].Name}" />
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...