在我的 Viewmodel 中,我具有LoggedInAs
字符串EditMode
类型和布尔类型的属性。我还有一个名为 List 的属性ReaderList
,我将其绑定到 ItemsControl 用于显示目的,如下所示:
<ItemsControl Name="ReaderList" ItemTemplateSelector="{StaticResource drts}"/>
我使用的是 Caliburn.Micro,所以绑定是通过命名自动完成的。我想使用 DataTemplateSelector 因为如果应用程序处于 EditMode 并且 Person 是登录的人,我想要一个完全不同的显示。所以这是我对资源的声明,
<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>
这里是类的代码:
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;
}
}
由于某种原因,应用程序在实例化 Viewmodel(分别是 View)时崩溃。错误在哪里,和/或我该如何解决这个问题?
编辑:崩溃是由于 DisplayReaderTemplateSelector 的构造中的绑定表达式 - 因为IsLoggedIn
并且EditMode
不是 DependencyProperties。
所以现在的问题是:如果我不能绑定到值,我怎么能有一个依赖于 ViewModel 状态的 DataTemplateSelector?