2011-03-08 2 views
1

I 다음 위젯 (및 첨부 한 도면)가 감안할. 위젯은 다음과 같습니다 "호스팅"뷰 모델 :바인딩리스트 박스 (위젯)

public class WidgetWorkspaceViewModel : Screen 
{ 
    private Screen myWidget = new MyWidgetViewModel(); 

    public Screen MyWidget 
    { 
     get { return myWidget; } 
     set { myWidget = value; } 
    } 
} 

그리고 컨트롤이 같은 WidgetWorkspaceView에 표시됩니다 :

<ContentControl x:Name="OneWidget"/> 

이 모두 잘 작동합니다. 하지만 이제는 WidgetWorkspaceViewModel에 위젯 모음이 포함될 수 있도록 WidgetWorkspaceViewView를 차례대로 변경해야합니다. 그리고이 문제를 해결하는 데 몇 가지 문제가 있습니다.

는 뷰 모델은 다음과 같이 가정한다 : 나는 콤보 상자에 위젯을 바인더 제본 한 및 콤보 상자가 제대로 컨트롤의 목록을 보여주기 때문에 코드의

private List<Screen> widgets; 

public List<Screen> Widgets 
{ 
    get { return widgets; } 
    set { widgets = value; NotifyOfPropertyChange(() => Widgets); } 
} 

이 부분은 OK입니다. 그러나보기에 위젯을 "호스팅"하는 데 문제가 있습니다. 중단 점을 바탕으로

<ListBox x:Name="Widgets"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <toolkit:WrapPanel /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 

    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <ContentControl Width="100" Height="100" DataContext="{Binding}"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

, 데이터 바인딩 부분은 OK 노력하지만 내가 그려 위젯을받지 못했습니다 :이 내가 WidgetWorkspaceView에 있지만 성공하지 않고 사용하려 한 XAML입니다.

어떻게 해결할 수 있습니까? 바인딩을 돕기 위해 Caliburn.Micro를 사용하고 있습니다.

답변

1

문제는 Caliburn.Micro가 재정의 할 ItemsControl에 대한 ItemTemplate을 자동으로 정의하므로 ListBox에서 해당 항목을 제거해야하거나 정의하려는 경우, 그런 다음 View 첨부 속성을 사용하여 모델을 설정하십시오. 당신은 또한 당신의 WidgetWorkspaceViewModel 유형으로 ConductorConductor<IScreen>.Collection.AllActiveConductor<IScreen>.Collection.OneActive 또는를 사용하기보다는 자신의 Screen 목록을 관리 할 수 ​​

<ListBox.ItemTemplate> 
    <DataTemplate> 
    <ContentControl Width="100" Height="100" cal:View.Model="{Binding}" /> 
    </DataTemplate> 
</ListBox.ItemTemplate> 

참고. 이 지휘자는 Items 컬렉션을 가지며 화면 수명주기를 지원합니다.

+0

우수 감사합니다. ItemTemplate 정의를 제거하여 문제를 해결했으며 대신 지휘자를 사용할 것입니다. –