强制绑定不是';我不想要什么

本文关键字:我不想 什么 绑定 | 更新日期: 2023-09-27 18:30:09

我的单向绑定没有按预期工作。

当我点击一个按钮添加一个新的"人员"时,它不会将新输入的人员添加到列表视图中,直到我关闭并重新启动应用程序(所以值会添加到DB中,而不是添加到UI中)

我做错了什么?我有INotifyPropertyChanged,我有ObservableCollection。。。我错过了什么?

我有我的型号:

    public class Person : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        private string _personName;
        private string _personEmail;
        private string _personPhone;
        private DateTime _personDOB;
        [PrimaryKey, AutoIncrement]
        public int personId { get; set; }
        [MaxLength(25)]
        public string personName {
            get { return _personName; }
            set
            {
                _personName = value;
                OnPropertyChanged("personName");
            }
        }
        [MaxLength(50)]
        public string personEmail { 
            get { return _personEmail; } 
            set
            {
                _personEmail = value;
                OnPropertyChanged("personEmail");
            } 
        }
        [MaxLength(13)]
        public string personPhone { 
            get { return _personPhone; } 
            set
            {
                _personPhone = value;
                OnPropertyChanged("personPhone");
            } 
        }
        public DateTime personDOB {
            get { return _personDOB;}
            set 
            { 
                _personDOB = value;
                OnPropertyChanged("personDOB");
            }
        }
        public Boolean isPersonActive { get; set; }
        public string Summary
        {
            get { return string.Format("{0} - {1} : {2} -- {3}", personName, personEmail, personPhone, personDOB); }
        }
        // Create the OnPropertyChanged method to raise the event 
        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
    }

在我的ViewModel中,我有这个:

public class ChoresVM
{
    private ObservableCollection<win8Chores.Model.databaseTables.Person> _personList;
    public ObservableCollection<win8Chores.Model.databaseTables.Person> personList
    {
        get { return _personList; }
        set { _personList = value; }
    }

    public ObservableCollection<win8Chores.Model.databaseTables.Person> selectAllPerson()
    {
        using (var db = new SQLiteConnection(dbPath))
        {
            ObservableCollection<win8Chores.Model.databaseTables.Person> pList = new ObservableCollection<win8Chores.Model.databaseTables.Person>(db.Query<win8Chores.Model.databaseTables.Person>("select personId,personName,personEmail,personDOB from Person"));
            _personList = new ObservableCollection<Model.databaseTables.Person>(db.Query<win8Chores.Model.databaseTables.Person>("select personId,personName,personEmail,personDOB from Person"));
            return _personList;
        }
    }
    public void insertPerson(string name, string email, string phone, DateTime dob, Boolean isActive = true)
    {
        dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "myDB");
        db = new SQLiteConnection(dbPath);
        using (db)
        {
            var p = db.Insert(new win8Chores.Model.databaseTables.Person()
            {
                personName = name,
                personEmail = email,
                personPhone = phone,
                personDOB = dob,
                isPersonActive = isActive
            });
        }
        selectAllPerson();
    }

然后在我看来:

    public MainPage()
    {
        this.InitializeComponent();
        VM = new ViewModel.ChoresVM();
        DataContext = VM;
    }
    private void btnAdd_Click(object sender, RoutedEventArgs e)
    {
        DateTime myDOB = new DateTime(1955, 02, 28);
        VM.insertPerson("test","test@live.com","123-456-7890", myDOB);
    }

我的XAML是这样的:

<ListView HorizontalAlignment="Left" Height="224" Margin="287,344,0,0" VerticalAlignment="Top" Width="740" x:Name="test" DisplayMemberPath="Summary" ItemsSource="{Binding personList,  Mode=OneWay}" />

强制绑定不是';我不想要什么

尝试在ChoresVM上实现INotifyPropertyChanged,并在初始化集合时(在selectAllPerson()或personList setter中)引发PropertyChanged("personList")。通过这种方式,项源绑定将得到通知,集合属性已更改,并将拾取新集合。你还有一个打字错误。在Binding中,您有"PersonList"(Pascal大小写),但您的属性是camel大小写(PersonList)