내 ViewModel에서 나는 유형 문자열의 LoggedInAs
속성과 부울 유형의 EditMode
속성을 가지고 있습니다. 바인딩은 이름에 의해 자동으로 수행되도록, 내가 Caliburn.Micro을 사용하고이 DataTemplateSelector를 작동시키는 방법?
<ItemsControl Name="ReaderList" ItemTemplateSelector="{StaticResource drts}"/>
: 나는 또한이 같은 표시 목적으로 ItemsControl에 바인딩 ReaderList
라는 목록 속성이 있습니다. DataTemplateSelector를 사용하고 싶습니다. 왜냐하면 응용 프로그램이 EditMode에 있고 Person이 로그인되어 있기 때문에 근본적으로 다른 디스플레이를 원하기 때문입니다. 어떤 이유
public class DisplayReaderTemplateSelector: DataTemplateSelector {
public DataTemplate CurrentUserTemplate { get; set; }
public DataTemplate OtherUserTemplate { get; set; }
public string IsLoggedInAs {get; set;}
public bool IsEditMode { get; set; }
public override DataTemplate SelectTemplate(object item, DependencyObject container){
var _r = item as Person;
if (IsEditMode && _r.Name == IsLoggedInAs) return CurrentUserTemplate;
else return OtherUserTemplate;
}
}
뷰 모델 인스턴스 응용 프로그램이 충돌하면서 (RESP를보기.) 그래서 여기 여기 내 자원의 선언,
<UserControl.Resources>
<DataTemplate x:Key="OtherPersonTemplate"> ... </DataTemplate>
<DataTemplate x:Key="CurrentUserIsPersonTemplate"> ... </DataTemplate>
<local:DisplayReaderTemplateSelector x:Key="drts"
IsLoggedInAs="{Binding LoggedInAs}"
IsEditMode="{Binding EditMode}"
CurrentUserTemplate="{StaticResource CurrentUserIsPersonTemplate}"
OtherUserTemplate="{StaticResource OtherPersonTemplate}"/>
</UserControl.Resources>
및 클래스의 코드입니다. 오류가 어디에 있으며 어떻게 해결할 수 있습니까?
편집 : IsLoggedIn
및 EditMode
이 DependencyProperties가 아니기 때문에 충돌이 DisplayReaderTemplateSelector 구성에서 바인딩 표현식 때문이었습니다.
그럼 이제 질문입니다. 값에 바인딩 할 수없는 경우 ViewModel의 상태에 따라 달라지는 DataTemplateSelector를 어떻게 가질 수 있습니까?
ViewModel의 코드는 어디에 있습니까? 오류가 무엇입니까? – Backlash
ViewModel은 꽤 큽니다. 위에서 설명한이 문제의 유일한 관련 부분은 노출 된 두 속성입니다. 오류 : Mscorlib.dll에서 'System.Reflection.TargetInvocationException'유형의 예외가 발생했지만 사용자 코드에서 처리되지 않았습니다. 응용 프로그램이 실행되지만 위의 VM으로 전환하면 충돌이 발생합니다 (로그인 한 후 StartUp ViewModel이 정상적으로 작동하며 위 VM을 사용하면 충돌이 발생 함). – EluciusFTW
TargetInvocationException의 InnerException을 살펴보면 유용한 정보가 종종 있습니다. –