绑定上下文和更新表单

时间:2019-01-21 15:23:15

标签: xamarin xamarin.forms

我只想在按下 Submit 按钮时更新User对象,而不是每次输入文本都更改时才更新(虽然数据库中的值没有更改,但是当我们选择再次成为用户(请参见图片编辑:我无法发布图片,我只会放置链接))

我的问题是,当我更改条目中的数据时,它会自动在ViewModel中进行更改(这很正常!因为Entry绑定模式设置为TwoWay),但我只想更新数据当我按下提交按钮

我更改了用户测试的所有值,但没有按提交 (1234> 12 /测试> TestModify /用户>管理器) 图片显示了我更改它们之前的值:

enter image description here

我在列表中单击“测试”之前的元素(其角色=管理员)

enter image description here

然后我再次单击1234(由于Mode=TwoWay中的Entry而导致值更改)

enter image description here

     private ObservableCollection<User> users;
        public ObservableCollection<User> Users
        {
            get { return users; }
            set
            {
                if (users != value)
                {

                    users = value;
                    RaisePropertyChanged(() => Users);
                }
            }
        }

        private User selectedUser;
        public User SelectedUser
        {
            get
            {
                return selectedUser;
            }
            set
            {
                if(selectedUser != value){

                selectedUser = value;
                RaisePropertyChanged(() => SelectedUser);
                }
            }
        }

OnItemSelected在我的Listview中,我使用Binding填写表单条目。

<StackLayout Spacing="20">
                        <Entry Placeholder="{localization:Localization UserCode}" Text="{Binding SelectedUser.UserCode, Mode=TwoWay}" />
                        <Entry Placeholder="{localization:Localization UserName}" Text="{Binding SelectedUser.FirstName, Mode=TwoWay}" />
  <Button
                                    Grid.Row="1"
                                    Grid.Column="0"
                                    BackgroundColor="#8bc34a"
                                    Command="{Binding Submit}"
                                    HorizontalOptions="Center"
                                    Text="{localization:Localization Submit}"
                                    TextColor="White"
                                    WidthRequest="150" />

我的命令:

   public async void SubmitAsync()
        {
            if (isEdit)
            {
                //TODO : Add Task.Run for Async function
                App.DatabaseManager.Update(selectedUser);
                int index = users.IndexOf(users.FirstOrDefault(x => x.Id == selectedUser.Id));
                Users[index] = SelectedUser;
            }
            else
            {
                App.DatabaseManager.Insert(selectedUser);
                users.Add(selectedUser);
            }
            IsVisible = false;
        }

PS:如果我为“进入”设置了OneWay模式,则在按下“提交”按钮时我无法获得新值(我知道该怎么做吗?我的ViewModel无权访问视图)

我试图在Submit命令中调用RaiseOnPropertyChanged()

我尝试在“新建”命令中调用RaiseOnPropertyChanged()(将我的SelectedUser设置为new User()

我认为只有当我按下“提交按钮”(以某种方式)时,才需要调用RaiseOnPropertyChanged()之类的函数{p}

请您原谅我的英语不是我的母语

0 个答案:

没有答案