2012-06-07 3 views
0

MVVM 패턴을 사용하여 사용자가 프로세스의 순서도를 만들 수있는 WPF 응용 프로그램을 개발하는 초기 단계에 있습니다. 왼쪽 창에서 enter image description hereMVVM을 사용하는 프로세스 모델러

기호는 WPF 경로 개체 다음과 같이

예비보기 보인다.

사용자가 심볼 패널에서 심볼을 다이어그램 부분으로 드래그 할 수 있어야합니다.

이제 코드 숨김 이벤트가있는 직선 WPF에서 작업하는 것이 매우 간단하지만 MVVM 패턴을 사용하여 구현하는 방법에 대한 제안이 필요합니다. 나는 내 모델에서 캔버스 (?)로 드래그 된 모든 심볼을 포함하는 Observable 컬렉션을 가지고 있다고 가정합니다. 그런 다음 심볼을 캔버스 위로 드래그 할 때마다 해당 컬렉션을 어떻게 업데이트합니까?

MVVM을 사용하는 경우보기의 코드 숨김이 완전히 비어 있어야하지만보기에 이벤트를 배타적으로 처리하는 코드를 배치하면 패턴이 깨지는 것이 이상적이라고 생각합니다.

도움을 주시면 감사하겠습니다.

<ItemsControl ItemsSource="{Binding Symbols}" ... /> 

은 물론, 당신은 적절한 데이터 템플릿 항목 템플릿이 필요합니다 캔버스 '의 ViewModel에서

답변

1

, 기호를 표시 할 ItemsControl를 사용하여 속성

public ObservableCollection<SymbolViewModel> Symbols { get; } 

하고보기를 정의 ItemsControl에 정의 된 항목 패널

ObservableCollection은 ItemsControl이 자동으로 업데이트되도록하는 INotifyCollectionChanged를 구현합니다.

+0

당신은 나에게 몇 가지 조언을 해 주셨습니다. 심볼 패널에서 다이어그램 캔버스로 드래그 기능을 구현하는 방법에 대한 제안 사항은 무엇입니까? – user823486

+0

WPF의 DragDrop.DoDragDrop()을 사용하여 드래그 작업을 시작하고 캔버스의 Drop 이벤트 핸들러에서 DragEventArgs.GetPosition()을 사용하여 심볼을 배치 할 마우스 위치를 결정합니다. –

1

당신이 다음 MVVM은 ViewModelModelView에서 View을 추출에 관한 것을 기억해야 어떤 이벤트가 MVVM에 맞는 방법에 대해 질문하는 경우는 ViewModel가 어떤 기본 Model이 무엇인지 인식하지 못합니다.

그래서이 아이디어에 충실하게 두 가지 관점이 있습니다.

1. If a view based event is handled in the code behind of the view (such as in `MyView.xaml.cs`) then as long as it does not refer the model or the viewmodel, it is perfectly fine in MVVM. Because such event handler is strictly a `View` specific code and should remain confined in the View layer (XAML or XAML.CS). 

2. If an event handler has to refer the model or the viewmodel then it should not be handled in the code behind of the view but should be converted into `Command` based behavior using Attached Properties. 

dragdrop 시나리오의 경우 2 번 방식을 선호합니다. 첨부 된 속성 및 MVVM w.r.t. 이벤트, 좋은 예제를 찾을 수 있습니다.

관련 문제