2012-06-04 3 views
2

mvvm 패턴을 사용해야합니다. 나는 viewmodel이 내가 읽었던 관점에서 관심을 가져서는 안된다는 것을 알고있다. 그 결과 나는이 문제를 해결하는 방법을 모른다 :MVVM viewmodel 참조보기

어쨌든
SomeDll.InitAutocomplete<string>(TextBox1, ListView1, SomeObservableCollection); 

내가 전화하는 방법을 알고하지 않습니다

을 나는 기본적으로 자동 완성 컨트롤에 텍스트 상자 및 목록보기를 켤 수있는 DLL을 가지고 그 방법은 mvvm 패턴을 사용하여 viewmodel에서. 보기의 컨트롤을 참조하면 규칙을 제동합니다.

MVVM 패턴에 익숙하지 않아서 회사에서 따라야합니다. 이 문제를 해결하는 가장 적절한 방법은 무엇입니까?

전체 뷰를 생성자 매개 변수로 viewmodel에 전달하여 문제를 해결할 수 있지만 뷰에서 두 개의 컨트롤을 참조해야하기 때문에 mvvm 패턴이 완전히 손상된다는 것을 알고 있습니다.

답변

3

여기에서하는 일은 순수한 관심사이므로보기 (코드 숨김)에서 수행하는 것이 좋습니다. 뷰는 VM과 관찰 가능한 콜렉션을 알고 있으므로 코드를 뒤에서 호출하도록하십시오.

(당신이 "SomeDll"에 대한 비 코드/XAML API를 얻을 수 있다면 나 또한보고 권하고 싶습니다,하지만 난 당신이 그 이상있을 수 있습니다 얼마나 많은 제어 아무 생각이 없다)

2

두 가지가 있습니다를 그 나는 여기서 지적 할 것이다 -

첫째, 이것은 사실 모든 View-layer 코드이다. 따라서 코드 숨김은 반드시 MVVM을 위반하는 것은 아닙니다. 필요한 경우 코드 뒤에 코드를 포함시켜 View-> ViewModel 레이어를 연결하지 않아도됩니다. 말했다되고 그건

,이 종종 두 가지 방법 중 하나를 더 우아하게 처리됩니다 - 효과적으로 AutoCompleteTextBox 제어 -

  1. 는 새 컨트롤에이 기능을 래핑 할 수있다. 이렇게하면 "textbox"및 "listview"시각적 요소를 컨트롤 템플릿에 포함하고 Xaml 내의 완성 항목에 바인딩 할 수 있습니다.

  2. 텍스트 상자에 "첨부"하고 해당 기능을 추가 할 수있는 첨부 된 속성 (또는 혼합 동작)으로 바꿀 수 있습니다 (모두 xaml 내에서). 그런 다음 항목 컬렉션은 첨부 된 속성 또는 동작에 대한 바인딩이됩니다.

관련 문제