は簡単で十分です:MVVMでデータを操作するには?データを読むために
- のViewModelは
- のViewModelがViewはのObservableCollection
に一覧/データグリッドの/ 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);
}
}
}
これにより、バインダーgからUsers
に変更してください。そうすれば、多かれ少なかれ逆のことが可能であるはずです。 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
名前はOnPropertyChangedを起動しませんか? – mageos