在我的Viewmodel中,我有屬性類型爲LoggedInAs
的字符串類型,EditMode
類型爲bool。我也有我綁定到一個ItemsControl用於顯示的這樣叫ReaderList
一個列表屬性:如何使這個DataTemplateSelector工作?
<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;
}
}
出於某種原因,應用程序崩潰,而實例化視圖模型(RESP查看)。錯誤在哪裏,和/或我該如何解決這個問題呢?
編輯:崩潰是由於在DisplayReaderTemplateSelector的構建中的綁定表達式 - 因爲IsLoggedIn
和EditMode
不是DependencyProperties。
所以現在的問題是:如果我無法綁定到值,我怎麼能有一個DataTemplateSelector取決於ViewModel的狀態?
哪裏是視圖模型的代碼在你的虛擬機
Context
財產?什麼是錯誤? – Backlash 2013-03-12 15:45:37ViewModel相當大,上面描述的這個問題的唯一相關部分是兩個暴露的屬性。錯誤是:在mscorlib.dll中發生了類型'System.Reflection.TargetInvocationException'的異常,但未在用戶代碼中處理。應用程序運行,但當我切換到上面的VM時崩潰(啓動ViewModel工作正常,登錄後,上面的虛擬機使用它崩潰)。 – EluciusFTW 2013-03-12 15:51:51
看看TargetInvocationException的InnerException,那裏通常有用的信息。 – 2013-03-12 16:00:57