2011-03-16 3 views
1

이것은 caliburn 질문보다 MVVM 질문에 더 가깝지만 caliburn을 사용하여 수행 할 수있는 방법과 관련이 있습니다.ViewModel 또는 Model 바인딩과 Caliburn.Micro

Sliverlight/WP7 개발에 익숙하지 않으므로 자신을 충분히 설명하지 못하면 알려 주시기 바랍니다.

필자는 caliburn.micro를 phonecontainer/simplecontainer 및 viewmodels 등의 WP7 앱에 올바르게 연결했습니다. 내가 겪고있는 문제는 모델 모음을 화면에 제대로 바인딩하는 방법입니다.

예를 들어

나는 다음과 같은 모델이 있습니다

SummaryItem 
{ 
    int Id 
    string Name 
    string Description 
} 

그리고 해당 뷰 모델 :

SummaryViewModel : Conductor<IScreen>.Collection.OneActive 
{ 
    ObservableCollection<SummaryItem> SummaryItems; 

    OnInitialize() 
    { 
     SummaryItems = // REST api call to load items 
    } 
} 

그리고보기 :

  <ListBox x:Name="SummaryItems" Height="617" HorizontalAlignment="Left" VerticalAlignment="Top" Width="468" Background="Transparent"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Button Width="460" Height="120"> 
         <Button.Content> 
          <StackPanel Orientation="Horizontal" Height="120" Width="400"> 
           <TextBlock Text="{Binding Id}" Height="120" FontSize="40" Width="350" /> 
           <TextBlock Text="{Binding Name}" Height="120" FontSize="40" Width="350" /> 
           <TextBlock Text="{Binding Description}" FontSize="40" Width="50" TextAlignment="Right" /> 
          </StackPanel> 
         </Button.Content> 
        </Button> 
        <ContentControl cal:View.Model="{Binding}" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" /> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

내 질문은, 적절한 무엇을 way in silverlight/caliburn을 사용하여 모델 객체 모음을 탐색에 사용할보기에 바인딩합니다. 보시다시피, 누군가가 버튼 중 하나를 클릭하면 다음 뷰 모델에서 다른 아이템 API 데이터를 가져 와서 화면에 표시합니다. 그러나 해당 목록 코드를 사용하여 항목을 화면에 표시 할 수 없습니다. ItemsSource = SummaryItems를 사용해 보았는데 그 방법이 효과적 이었지만 어떻게 샘플이 엉망이 됐는지는 알 수 없습니다. 샘플에서는 Items 속성이 viewmodel에 사용되고 모델 개체와 어떻게 통합되는지 잘 모르겠습니다.

아마도 이러한 상황에서 바인딩이 어떻게 작동하는지, 그리고 캘리브레이션이 어떻게 통합되는지 명확하지 않습니다. 누구든지 올바른 방향으로 나를 가리킬 수 있을까요?

도움을 주시면 감사하겠습니다. 감사!

답변

1

당신은 오히려 전화에서 새 ObservableCollection에를 만드는 것보다 당신의 ObservableCollection에에 항목을 추가해야합니다

SummaryViewModel : Conductor<IScreen>.Collection.OneActive 
{ 
    private readonly ObservableCollection<SummaryItem> _items; 
    public ObservableCollection<SummaryItem> SummaryItems 
    { 
     get 
     { 
      return _items; 
     } 
    } 
    ObservableCollection<SummaryItem> SummaryItems; 

    public SummaryViewModel() 
    { 
     _items = new ObservableCollection<SummaryItem>(); 
    } 

    protected override void OnInitialize() 
    { 
     var items = MyRestCall(); 
     SummaryItems.Clear(); 
     foreach(SummaryItem s in items) 
     { 
      SummaryItems.Add(s); 
     } 
    } 
} 
관련 문제