2010-04-29 2 views
1

ComboBox에 CustomerViewModels의 목록이 있습니다. 선택한 CustomerViewModel과 삭제 된 고객이 리포지토리에서 CustomerViewModel을 제거합니다.MVVM : CustomerViewModel을 삭제하지만 내부에 Customer 모델을 가져 오는 방법은 무엇입니까?

그러나 CustomerViewModel에서 Customer 모델에 어떻게 액세스 할 수 있습니까?

+0

는 잘 작동 할 수 : _customerRepo.Delete (새 고객() { 의 CustomerID = SelectedCustomerViewModel.CustomerID, FIRSTNAME = SelectedCustomerViewModel.FirstName, }); – msfanboy

답변

2

CustomerViewModels 컬렉션을 CustomerViewModels의 ObserableCollection으로 만듭니다. 이 당신을 구입하는 것을 당신이 모델을 조작 할 수 거기에서 있도록, 수집 즉, 삭제에 대한 변경 대리자에들을 수 있다는 CollectionChanged 이벤트입니다 따라

http://msdn.microsoft.com/en-us/library/ms653375(VS.85).aspx

아마도 뭔가

public class CustomersViewModel: ViewModelBase 
{ 
    public ObservableCollection<CustomersViewModel> Customers { get; private set; } 

    public CustomersViewModel() 
    { 
     Customers = new ObservableCollection<CustomersViewModel>(GetCustomers()); 
     Customers.CollectionChanged += 
      (sender, args) => 
       { 
        if (args.Action == NotifyCollectionChangedAction.Remove) 
        { 
         foreach (CustomerViewModel customerViewModel in args.NewItems) 
         { 
          DeleteCustomer(customerViewModel.Customer); 
         } 
        } 
       }; 
    } 

    private void DeleteCustomer(Customer customer) 
    { 
     // Call into your repo and delete the customer. 
    } 

    private List<CustomersViewModel> GetCustomers() 
    { 
     // Call into your model and return customers. 
    } 

    ... ICommands ect... 

} 
같은
+0

ObservableCollection 등을 이미 사용하고 있습니다 ... 여기에는 설치가 잘되어있어 CustomerViewModel 클래스의 고객 개체가 인스턴스 이름의 시작 부분에 "_"문자가 있습니다. "SchoolclassViewModel"을 입력했을 때 나는 그것을 보지 못했습니다. 나는 어쩌면 내 오타를 보았다 wouldnt가 해당 게시물하지 않고 다시 ... 고객을 얻을 수 들으; 공공 Schoolclass SelectedSchoolclass {} GET {반환 _schoolclass} : ;-) 나는 CustomerViewModel에 넣고 ; P – msfanboy

+0

:) 언제든지 –

1

CustomerCustomerViewModel에 이미 액세스했을 수 있습니다. (VieModel은 Customer의 속성을 노출해야하므로 뷰에서 데이터 바인딩 할 수 있음) 일반적으로을 노출하여이 작업을 수행합니다.또는 직접 사본).

요점은 이 아니어야합니다. Customer 자신을 삭제하는 것입니다. 그게 ViewModel에 대한 것이고, ICommand은 관련 Customer을 삭제합니다. 사용중인 MVVM 프레임 워크에 따라 DelegateCommand 또는 이와 동등한 제품을 살펴보십시오.

귀하의 CustomerViewModel

public ICommand DeleteCommand { get; private set; } 

있을 것와보기 바인딩 것 CommandTarget (아마 Button)이 명령에. 명령을 실행하면 CustomerViewModel의 개인 메서드가 실행되고 삭제 메커니즘을 코드의 다른 부분에 노출시키지 않고 Customer을 삭제할 수 있습니다. 예를 들어 :

public CustomerViewModel() 
{ 
    this.DeleteCommand = new DelegateCommand(this.ExecuteDeleteCommand); 
} 

private void ExecuteDeleteCommand() 
{ 
    // remove the Customer from the ObservableCollection of customers 
    // and also delete it from the database, or do anything else you want 
} 
+0

도 완벽하게 유효합니다. –

관련 문제