0
要读取的数据是很容易的:如何使用MVVM中的数据?
- 视图模型从数据库中获取数据
- 视图模型增加了数据的ObservableCollection
- 查看绑定列表/ DataGrid中的/ etc到的ObservableCollection
如下:
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);
}
}
}
所以这允许bindin g到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更新数据源的正确方法?
“UserViewModel.Name”在哪里定义? – Lithium
在ViewModel上。我用属性定义替换了那里的注释 – Ortund
Is Name not firing OnPropertyChanged? – mageos