2012-07-16 3 views
3

C#에서 MVVM을 따르고 있으며 목록 상자에보기를 표시하려고합니다.WPF 목록 상자 및 MVVM 바인딩

목록 상자 itemsource (코드에서 바인딩 및 viewmodels 컬렉션을 사용하지 않음)를 설정하고 datatemplate을 xaml에서 내보기로 설정합니다. 내가 겪고있는 문제는 뷰에서 datacontext를 제거하더라도 괜찮 았지만 내 기본 뷰 생성자 값으로 항상로드됩니다. 다음은

내가이 내보기에 대한 XAML입니다 XAML

<ListBox Name="lbCatalogues" HorizontalContentAlignment="Stretch"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
       <view:CatalogueRowView/> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 

에서 작성하고있는 목록 상자입니다. 나는 목록 상자에서 올바르게로드 뷰를 얻을 수있는 방법

lbCatalogues.ItemsSource = catalogueViewModel.Records;

내 질문은 : 나는 DataContext를 제거하면이 내가 목록 상자의 ItemSource을 설정하고 코드입니다

<UserControl.DataContext> 
    <model:CatalogueModel /> 
</UserControl.DataContext> 

    <Grid Name="Container" > 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="50" /> 
     <ColumnDefinition Width="100" /> 
     <ColumnDefinition Width="100" /> 
     <ColumnDefinition Width="1*" /> 
     <ColumnDefinition Width="40" /> 
    </Grid.ColumnDefinitions> 
    <!-- Catalogue_ID, UploadedTime, Client_ID, Name, Desc, Filesize --> 
    <Label Name="lblCatalogueID" Content="{Binding Path=CatalogueID}" Grid.Column="0"/> 
    <Label Name="lblUploadedTime" Content="{Binding Path=UploadedTime}" Grid.Column="1"/> 
    <Label Name="lblCatalogueName" Content="{Binding Path=Name}" Grid.Column="2"/> 
    <Label Name="lblCatalogueDescription" Content="{Binding Path=Description}" Grid.Column="3"/> 
    <Label Name="lblFilesize" Content="{Binding Path=Filesize}" Grid.Column="4"/> 
    <Grid/> 

작동 그래서 목록 상자의 각 항목에는 해당 목록 상자 Itemsource에 연결된 DataContext가 있습니까?

답변

0

lbCatalogues.ItemsSource = catalogueViewModel.Records; ListBox의 ItemsSource를 ItemsSource = "{Binding Records}"로 xaml에 간단히 바인딩하십시오. 이것이 도움이되기를 바랍니다.

당신은 이미 답을 알고
4

: 단순히 당신은 DataContext에 대한 CatelogueModel의 새로운 인스턴스를 사용하도록 UserControl을 말하고있다 당신의 UserControl

에서 <UserControl.DataContext>을 제거하고이 사용할 때 설정되는 모든 DataContext에 우선 당신의 UserControl. 자세한 내용은 Dependency Property Precedence의 MSDN 목록을 참조하십시오.

UserControl 안에 DataContext을 설정하지 않는 것이 좋습니다. 별도의 UI 및 데이터 레이어를 사용하여 WPF가 작동하는 방식에 위배되며 사용자를 사용하려는 모든 사용자에게 문제입니다.

ItemsSource에 연결된 ListBox의 각 항목에 대한 질문에 대해 DataTemplates는 WPF 개체를 그리는 방법. 객체 뒤의 데이터는 여전히 남아 있습니다.

는 예를 들어, 목록 상자 Record 객체의 목록을 포함하고 DataTemplateCatelogueRowView와 레코드 각각을 그립니다 ListBox을 말하고있다. CatelogRowView의 실제 데이터는 여전히 데이터 개체입니다. catelogueViewModel.Records

+0

답장을 보내 주셔서 감사합니다. 나는 usercontrol.datacontext를 제거했다. usercontrol_loaded 메서드에서 datacontext 내에서 정보를 사용하려고했습니다. 난 그냥 datacontext 다시 (timmeh) 그것을 캐스팅했다. 난 그게 이상한 것을 볼 수있는 datacontext 데이터 형식을로드하는 대신에 기본 생성자를로드하는 것입니다 그것은 건설 시간에 주어진 모델을로드하는 것입니다. – Brett

+0

@ user1444261 당신의''는 타입을 설정하지 않습니다. 실제'UserControl.DataContext' 속성을'CatelogueModel'의 새로운 인스턴스로 설정합니다. – Rachel