2012-06-22 3 views
2

저는 Caliburn.Micro에 새로 온 사람이며 아직 얻지 못하는 몇 가지 사항이 있습니다. 첫째ViewModel 자체를 Caliburn Micro 규약을 사용하여 DataTemplate에 바인딩합니다.

뷰 모델 :의

먼저 다른 ViewModels의 수집 관리하는 뷰 모델이다 : 나는 ItemsControl에있어

public class NavigationBarViewModel : PropertyChangedBase 
{ 
    public BindableCollection<IHaveDisplayName> Items { get; set; } 
} 

를 a의 루트로 (그것은 그 중요한 경우 Telerik RadOutlookBar입니다) UserControl

그보기 및 ItemTemplate 너무 내가 해당 컬렉션에 삽입 할 ViewModels 래핑 된 해당 RadOutlookBarItem (여기 ItemTemplate 대신 ItemContainer 사용해야합니까?) 설정합니다.

<telerik:RadOutlookBar x:Name="Items"> 
    <telerik:RadOutlookBar.TitleTemplate> 
     <DataTemplate> 
      <ContentControl Content="{Binding Path=DisplayName}" /> 
     </DataTemplate> 
    </telerik:RadOutlookBar.TitleTemplate> 
    <telerik:RadOutlookBar.ItemTemplate> 
     <DataTemplate> 
      <telerik:RadOutlookBarItem cal:Bind.Model="{Binding}" 
             Header="{Binding Path=DisplayName}"> 
       <ContentControl /> 
      </telerik:RadOutlookBarItem> 
     </DataTemplate> 
    </telerik:RadOutlookBar.ItemTemplate> 
</telerik:RadOutlookBar> 

이렇게하면 ContentControl의 위치에 컬렉션의 ViewModels가 표시되지 않습니다. 컨벤션이 작동하지만 컨벤션을 통해 ContentControl에 바인딩하는 방법을 알지 못하도록 모델을 DataTemplate의 루트 항목에 바인딩합니다. 물론 DataTemplate 내부의 DataContext는 ViewModel 자체입니다. 일반 WPF 표준을 사용하면 Content = "{Binding}"을 넣을 수 있습니다.

이제 모델은 RadOutlookBarItem 내부에 있지만보기가 적용되지 않습니다. 보기조차도 찾을 수 없으며, 클래스 이름이있는 문자열 만 표시됩니다.

이 작업을 수행하는 적절한 방법이 아닙니까?

답변

2

내가 대답 한 것처럼 : Dynamic Telerik RadOutlookBar headers come out wrong with ItemTemplate 나는 무관 한 문제라고 생각했는데 잘못된 속성을 사용하고있었습니다. ItemTemplate은 선택시 나타나는 픽커와 contentTemplate을 제어합니다. 다음은 작동하는 코드입니다.

<telerik:RadOutlookBar x:Name="Items"> 
    <telerik:RadOutlookBar.ContentTemplate> 
     <DataTemplate > 
      <ContentControl cal:View.Model="{Binding}" /> 
     </DataTemplate> 
    </telerik:RadOutlookBar.ContentTemplate> 
    <telerik:RadOutlookBar.TitleTemplate> 
     <DataTemplate> 
      <TextBlock x:Name="DisplayName" 
         cal:Bind.Model="{Binding}" /> 
     </DataTemplate> 
    </telerik:RadOutlookBar.TitleTemplate> 
    <telerik:RadOutlookBar.ItemTemplate> 
     <DataTemplate> 
      <TextBlock x:Name="DisplayName" 
         cal:Bind.Model="{Binding}" /> 
     </DataTemplate> 
    </telerik:RadOutlookBar.ItemTemplate> 
</telerik:RadOutlookBar> 
관련 문제