我只想在按下 Submit 按钮时更新User对象,而不是每次输入文本都更改时才更新(虽然数据库中的值没有更改,但是当我们选择再次成为用户(请参见图片编辑:我无法发布图片,我只会放置链接))
我的问题是,当我更改条目中的数据时,它会自动在ViewModel
中进行更改(这很正常!因为Entry绑定模式设置为TwoWay
),但我只想更新数据当我按下提交按钮
我更改了用户测试的所有值,但没有按提交 (1234> 12 /测试> TestModify /用户>管理器) 图片显示了我更改它们之前的值:
我在列表中单击“测试”之前的元素(其角色=管理员)
然后我再次单击1234(由于Mode=TwoWay
中的Entry
而导致值更改)
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}
请您原谅我的英语不是我的母语