2012-02-23 2 views
1

WPF 및 MVVM을 사용하고 있습니다. 내 응용 프로그램에서는 기본 화면에서 항목을 선택한 다음 버튼을 눌러 세부 정보를 볼 수 있습니다. 새 창을 열어야하며 IsSelected가 ObservebleCollection의 항목에 바인딩 된 목록 뷰에서 여러 항목을 선택할 수 있습니다.WPF/MVVM에서 동일한 인스턴스에 바인딩 된 두 개의 listviews를 서로 다른 선택으로 유지하는 방법

사용자가이 버튼을 다시 누르면 (동일한 기본 화면에서) 동일한 세부 정보로 다른 창이 열립니다. 그러나 다른 선택을하면 첫 번째 창이 동기화되어 동일한 선택 항목이 표시된다고 가정합니다.

서로 다른 선택으로 두 개의 창을 만들 수 있습니다. 이것이 가능하며 작동하게하려면 어떻게해야합니까?

업데이트 : 예 : 4 륜 자동차 (컬렉션)가 있다고 가정 해 보겠습니다. 두 창에있는 listviews는 4 개의 바퀴를 보여줍니다 (하나의 항목은 하나의 바퀴 임). 목록보기에서 휠 1과 2를 선택하면 다른 창에서도 휠 1과 2가 선택됩니다. 하지만 창 2에서 3과 4를 선택하고 창 1에서 휠 1과 2를 선택하려고합니다. 그리고 나는 4 륜차의 또 다른 컬렉션을 추가하고 싶지 않습니다. 그렇지 않으면 나는 8 륜구동 차 ... 또는 4 륜 2 륜차를 가지고있을 것입니다. 그러나 3 륜과 4 륜을 바꿀 경우 두 번째 차만 바꿀 것입니다.

업데이트 2 : , BTW 내 응용 프로그램에서 :

  • 나는 목록보기 n 개의 창에 0이있다.
  • 뷰 모델을 포함하는 창을 만듭니다.
  • 각보기 모델은 '실제'모델을 참조합니다.

선택한 항목에 대한 바인딩 변수는 실제 모델 내부에 있으므로이 값을보기 모델로 이동해야하지만 어떻게해야할지 모르겠다. 왜냐하면 (예제에서 바퀴의) 속성은 '실제'모델에 있고 그것들은 같은 목록보기 (항목)에서도 바인딩되기 때문입니다. Ic

답변

1

두 개의 목록 만있는 경우 IsSelected를 두 개의 개별 속성 (예 : IsSelectedInList1, IsSelectedInList2)에 바인딩 할 수 있습니다.

사실, 뷰 모델은 사용자의 UI를 코드없이보기로 표현한 것으로되어 있습니다. 따라서 UI에 여러 상태가있는 것으로 가정되는 두 개 (또는 N)의 목록이있는 경우이를 나타내는 메모리에 해당 뷰 모델의 사본을 두 개 (또는 N 개) 만드는 것이 좋습니다.

나는 4 륜의 다른 컬렉션을 추가하고 싶지 않습니다. 그렇지 않으면 나는 8 륜 자동차를 가지고 ... 또는 2 륜 4 륜 자동차를 가지고있을 것입니다. 그러나 3 륜과 4 륜을 바꾸면, 그것은 바뀔 것입니다. 두 번째 차.

여러분의 모델을 생각할 때 이것이 더 사실이라고 생각합니다. 모델에서 특정 자동차의 인스턴스 하나를 원하고 그 자동차에 4 개의 바퀴가 하나만 있어야합니다. 그러나 서로 다른 상태 (서로 다른 상태)를 원하면 해당 모델에서 두 개의 뷰 모델을 만드는 것이 좋습니다.

+0

두 개의 목록은 하나의 예일뿐입니다. 실제로 동일한 기본 모델 (예 : 자동차)을 사용하여 목록 뷰가있는 0 개, 1 개 이상의 창을 가질 수 있습니다. 나는 두 개의 뷰 모델이 필요하다는 것을 알고 있지만 뷰 모델은 동일한 모델 (자동차)을 참조해야합니다 ... 또는 예를 들어 선택한 항목을 제외한 휠이 변경되었을 때 모든 모델을 동기화해야합니까? –

+1

그래서 선택 상태를 제외하고 목록의 휠을 동기화 상태로 유지 하시겠습니까? IsSelected 속성과 휠 자체에 대한 참조가있는 래퍼 뷰 모델을 만들 수 있습니다. 새 목록을 표시 할 때마다 이러한 래퍼의 새 모음을 작성할 수 있습니다. 당신의 구속력에서 당신은 래퍼라고 말할 수 있습니다. 선택자와 래퍼. 힘 .SomeProperty. –

+0

소리가 들리 겠지만 모델 (보기)이 훨씬 복잡해집니다. (괜찮 으면, 나는 그것이 작동하는지 점검 할 때까지 대답을 수락하는 것을 기다린다). –

1

두 개의 목록은 두 목록이 모두 동일한 컬렉션 (즉, 동일한 참조)에 바인딩되거나 동일한 개체 인스턴스가 포함 된 컬렉션에 바인딩 된 경우에만 동기화됩니다. 따라서 각 뷰 모델은 자체적 인 독립 컬렉션을 필요로합니다.

+0

예, 그렇습니다. 나는 더 명확하게하기 위해 나의 질문에 모범을 보인다. –

+0

의미 동일한 컬렉션을 가지고 있지만 위의 자동차 예제를 통해 동일한 컬렉션을 갖는 것이 직관적임을 분명히 밝힙니다. –

+0

목록보기 선택 사항이 동기화 될 것이라고 추측했기 때문에 upvoted ... 동기화하지 말고 동일한 모델/개체 인스턴스를 사용하는 방법? –

관련 문제