Với Caliburn.Micro Tôi muốn biết những ưu và khuyết điểm của việc trưng ra một thực thể EF4 như một tài sản của ViewModel (một kỹ thuật được thảo luận hereand here). Điều này cho phép tôi tránh viết getters và setters cho mọi lĩnh vực (xem OneCustomer dưới đây). Hạn chế là tôi cần phải viết tất cả các câu lệnh ràng buộc trong XAML (bên dưới LastName không có trong ViewModel nhưng không yêu cầu ràng buộc XAML). Nếu tôi dính vào kỹ thuật quy định điền vào ViewModel của tôi với các thuộc tính cho mỗi trường (như FirstName bên dưới), cuối cùng tôi sẽ phải viết thêm một tấn mã phụ để NotifyOfProperyChange sẽ được gọi. Ứng dụng sẽ khá lớn. Tôi có nên trưng ra mỗi thực thể như một tài sản của ViewModel không?Ràng buộc EF4 với Caliburn.Micro: Tôi có nên để Đối tượng của mình là tài sản của ViewModel không?
Trong ViewModel của tôi:
private MyEntities _context = new MyEntities();
private BindableCollection<Customer> _custBindableCollection;
private Customer _oneCustomer;
private string _firstName;
public void Load()
{
_custBindableCollection = new BindableCollection<Customer>(_context.Customers.Where(row => row.CustomerType == "FOO"));
AllCustomers = _custBindableCollection;
_oneCustomer = _custBindableCollection.FirstOrDefault();
FirstName = _oneCustomer.FirstName;
OneCustomer = _oneCustomer;
}
public BindableCollection<Customer> AllCustomers
{
get { return _custBindableCollection;}
set {_custBindableCollection = value;
NotifyOfPropertyChange(() => AllCustomers);}
}
public Customer OneCustomer
{
get { return _oneCustomer;}
set { _oneCustomer = value;
NotifyOfPropertyChange(() => OneCustomer);}
}
public string FirstName
{
get { return _firstName; }
set {
_firstName = value;
_oneCustomer.FirstName = value;
NotifyOfPropertyChange(() => FirstName);
NotifyOfPropertyChange(() => CanSaveChanges);
}
}
public void SaveChanges()
{ _context.SaveChanges(); }
public bool CanSaveChanges { get { return IsValid; } }
quan điểm của tôi:
<StackPanel>
<StackPanel Orientation="Horizontal">
<Label Content="First Name:" />
<TextBox x:Name="FirstName" />
</StackPanel>
<StackPanel Orientation="Horizontal" DataContext="{Binding Path=OneCustomer}">
<Label Content="Last Name:" />
<TextBox x:Name="LastName" Text="{Binding LastName}" />
</StackPanel>
<Button Content="Load Data" x:Name="Load" />
<Button Content="Save" x:Name="SaveChanges" />
<DataGrid x:Name="AllCustomers" />
Cảm ơn trước.
Đây là thông tin tuyệt vời. Đặc biệt là quy ước của CM giải thích dấu gạch dưới dưới dạng ký hiệu chấm. Tôi chắc chắn sẽ kiểm tra AutoMapper và cuốn sách MVC. Một câu hỏi nhỏ mặc dù ... nên thuộc tính thực thể được cập nhật trong setters (để giá trị), hoặc tôi nên chờ đợi cho đến khi lưu được nhấp và cập nhật tất cả cùng một lúc? Cảm ơn một lần nữa. – DeveloperDan
Bạn có yêu cầu khi nào tồn tại trong cơ sở dữ liệu không, khi giá trị thuộc tính thay đổi so với người dùng nhấp vào lưu? –
Không, tôi sẽ tiếp tục lưu giữ (quy tắc chunky không phải trò chuyện). Những gì tôi đã suy nghĩ là nếu tôi không tiếp xúc với thực thể, tôi có thể đợi cho đến khi Save cập nhật tất cả các thuộc tính thực thể. Nhưng bây giờ tôi nghĩ về nó mà không có ý nghĩa bởi vì tôi phải cập nhật tất cả các giá trị ngay cả khi chỉ có một thay đổi. Vì vậy, tôi đã trả lời câu hỏi của riêng tôi - Tôi sẽ giữ cập nhật thuộc tính/trường thực thể trong các trình cài đặt. – DeveloperDan