2011-02-16 4 views
1

Silverlight 응용 프로그램 및 MVVM 패턴 사용에 약간 문제가 있습니다.Silverlight : 코드 뒤의 ViewModel 트리거 함수

내보기에는 DataGrid가 있습니다. ItemsSource는 일반적으로 ViewModel에 바인딩되지만 특정 경우에는 동적 인 열이 필요하고 내 항목 컬렉션은 각 항목에 대한 사전으로 구성되어 있으므로 표시 할 클래스 속성이 없습니다. 내 DataGrid의 실제 디자인이 내 ViewModel과 아무 관련이 없기 때문에 내 솔루션은 코드 숨김에서이 ​​모든 것을 생성하는 것이 었습니다. 이것은 열이 데이터 바인딩 될 수 없기 때문에 내가 생각할 수있는 유일한 해결책이었습니다.

나는이 모든 것을 사용할 수 있습니다. 내 문제는 내가 RIA를 사용하고 있으며 아이템 컬렉션이 로딩을 마쳤을 때 뷰가 잘 모른다는 것입니다. 뷰에 일반 단추를 넣어 코드 숨김 기능을 트리거하여 디자인을 시도했지만 분명히이 솔루션은 좋지 않습니다. 내 아이템 콜렉션이 로딩을 마친 즉시 실행할 수 있도록 codebehind 함수가 필요합니다.

내 코드 숨김을 ViewModel에서들을 수 있습니까?

답변

1

어딘가에서 물건을 어지럽 혔다는 느낌이 들었습니다.

귀하의 질문에 대해 나는 당신이 ViewModel에서 이벤트를 갖는 것으로 해결할 수 있다고 생각합니다. 보기의 view_Loaded 이벤트에서 해당 이벤트를 구독하고 처리기에서 codebehind 함수를 호출하십시오.

디자인을 다시 확인하고 이것이 정말로 필요한지 확인하는 것이 좋습니다.

0

저는 여러분이 의미하는 바를 이해하고 있습니다. 실버 라이트에서 PIA 인 임의의 열을 생성하는 작업을 한 번 해보았습니다. 동적 인 속성 집합이있는 일종의 개체가 필요했기 때문입니다.

사전 솔루션을 찾았습니다. 가장 깨끗한 솔루션이 아닌 코드 작성자가 제안하는 것은 변환기에이 코드를 추가하는 것입니다. 그런 다음 itemscontrol의 itemssource에 콜렉션을 바인드하고 listchanged가 올라 오면 변환기의 DataGrid를 어셈블합니다.

작은 예 :

<ItemsControl Grid.Row="1" ItemsSource="{Binding theListOfEntities, Converter={StaticResource theconverter}}"/> 
관련 문제