模型和ViewModel概念MVVM WPF

时间:2019-01-08 15:09:33

标签: c# wpf mvvm

我想从数据库中读取一些数据并对它们进行一些处理,然后在视图中查看它们。 我读了很多有关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 :(得分:0)

我编辑了您的课程并且正在上班

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>