读取数据很容易:
如下:
private readonly ObservableCollection<User> _users
= new ObservableCollection<User>();
public IEnumerable<User> Users
{
get { return _users; }
}
public ICommand ListUsersCommand
{
get
{
return new DoSomething(ListUsers);
}
}
private void ListUsers()
{
using (OrtundDbContext db = new OrtundDbContext())
{
var Users = db.Users.Where(x => x.Deleted == false);
foreach (var u in Users)
{
if (!_users.Contains(u))
_users.Add(u);
}
}
}
因此,这允许绑定到Users
xaml 中,因此假设或多或少应该可以进行反向操作似乎是合乎逻辑的。Window 上控件的更新值可以发回并在 ViewModel 中用于更新那里的数据源。
不幸的是,这不是正在发生的事情......
目前我有以下几点:
<StackPanel DataContext={Binding ViewModels:UserViewModel}">
<Label>Name:</Label>
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<Button Name="btnAdd" Command="{Binding AddUserCommand}" Content="Add User" />
</StackPanel>
// Base model implements INotifyPropertyChanged
public class UserViewModel : BaseModel
{
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChangedEvent("Name");
}
}
public ICommand AddUserCommand
{
get
{
return new DoSomething(AddUser);
}
}
public void AddUser()
{
var User = new User
{
User.Name = Name // assign values based on properties.
};
using (OrtundDbContext db = new OrtundDbContext())
{
db.Users.Add(User);
db.SaveChanges();
}
}
}
现在的问题是,当我到达 AddUser 时,似乎 ViewModel 的属性值(UserViewModel.Name
例如)都是空的,表单中没有任何值。
我这样做错了吗?从 UI 更新数据源的正确方法是什么?
确保将DataContext
的TextBox
或其任何父元素设置为UserViewModel
调用以下命令的的实际实例:
<StackPanel>
<StackPanel.DataContext>
<local:UserViewModel />
</StackPanel.DataContext>
<Label>Name:</Label>
<TextBox Text="{Binding Name, UpdateSourceTrigger=PropertyChanged}" />
<Button Name="btnAdd" Command="{Binding AddUserCommand}" Content="Add User" />
</StackPanel>
如果您使用上述示例标记并在AddUser()
方法中设置断点,您应该注意到该Name
属性具有您在TextBox
.
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句