2010-07-15 5 views
1

이름과 다른 정보를 표시하기 위해 일부 textblocks가있는 ItemsControl을 포함하는 뷰가 있습니다. 내 창에서 다음과 같이보기를 창에 추가하고있는 창 뒤에있는 코드에서 MainWindow Loaded 이벤트의 뷰 모델에 대한 뷰의 datacontext를 다음과 같이 바인딩합니다. ViewOwnerSideBar.DataContext = viewModel 응용 프로그램이 컴파일되지만 나는 데이터를 얻지 못한다. 내 viewmodel을 확인하고 반환 할 컬렉션에 데이터가 있습니다. 누구든지이 작업을 수행하는 방법에 대한 좋은 예가 있습니까? 소유자의 세부 정보를 표시하는 오른쪽에 사이드 바보기 및 기본보기가 있습니다. Wpf 뷰를 ViewModel에 바인딩 wpf에 추가 window

내보기

<UserControl.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="/Resources/ColorsAndBrushes.xaml"/> 
      <ResourceDictionary Source="/Resources/DefaultStyles.xaml"/> 

     </ResourceDictionary.MergedDictionaries> 

    </ResourceDictionary> 

</UserControl.Resources> 

<DockPanel > 
    <ScrollViewer VerticalScrollBarVisibility="Auto" > 
     <ItemsControl Width="250" 
         VerticalAlignment="Stretch" 
         BorderThickness="0" 
         ItemsSource="{Binding Path=AllOwners}"> 
     <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid Margin="2"> 
         <Border Margin="2 2 0 0" 
           CornerRadius="4" 
           Background="Gray" 
           Opacity=".5" /> 
         <Border BorderBrush="{StaticResource redBrush}" 
           BorderThickness="2" 
           CornerRadius="4" 
           Background="White" 
           Margin="0 0 2 2" 
           Padding="3"> 
          <Grid> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="Auto" /> 
            <ColumnDefinition /> 
           </Grid.ColumnDefinitions> 
           <Grid.RowDefinitions> 
            <RowDefinition /> 
            <RowDefinition /> 
            <RowDefinition /> 
           </Grid.RowDefinitions> 

           <TextBlock Grid.ColumnSpan="2" 
              FontWeight="Bold" 
              Text="{Binding FullName}" /> 

           <TextBlock Grid.Row="1" 
               Text=" FirstName: " /> 
           <TextBlock Grid.Row="1" 
               Grid.Column="1" 
               Text="{Binding FirstName}" /> 

           <TextBlock Grid.Row="2" 
               Text=" Email: " /> 
           <TextBlock Grid.Row="2" 
               Grid.Column="1" 
               Text="{Binding Email}" /> 
          </Grid> 
         </Border> 
         <Button Style="{StaticResource openButton}" /> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
    </ItemsControl> 
    </ScrollViewer> 
</DockPanel> 

이 내 창입니다

<DockPanel> 

    <v:HeaderTopBar DockPanel.Dock="Top"></v:HeaderTopBar> 
     <!--<uc:SearchBar DockPanel.Dock="Top" />--> 

    <StatusBar DockPanel.Dock="Bottom"> 
     <StatusBarItem DockPanel.Dock="Right"> 
      <Slider x:Name="zoomSlider" 
        Width="125" 
        Value="1" 
        Minimum=".5" 
        Maximum="2" /> 
     </StatusBarItem> 

     <StatusBarItem DockPanel.Dock="Right"> 
      <TextBlock>Zoom:</TextBlock> 
     </StatusBarItem> 

     <StatusBarItem> 
      <TextBlock Text="{Binding StatusText}" /> 
     </StatusBarItem> 
    </StatusBar> 

    <Expander DockPanel.Dock="Left" 
       ExpandDirection="Right" 
       IsExpanded="True" 
       BorderThickness="0 1 1 1" 
       BorderBrush="Gray" 
       Margin="0 2 0 0" 
       Padding="2"> 
     <Expander.Header> 
      <TextBlock Text="Contacts" 
         FontSize="14" 
         FontWeight="Bold"> 
       <TextBlock.LayoutTransform> 
       <RotateTransform Angle="90" /> 
       </TextBlock.LayoutTransform> 
      </TextBlock> 
     </Expander.Header> 
     <v:OwnerSideBar/> 

    </Expander> 

    <TabControl x:Name="tabs" 
       Grid.Column="2" 
       Margin="5 0"> 
     <TabControl.LayoutTransform> 
      <ScaleTransform ScaleX="{Binding ElementName=zoomSlider, 
              Path=Value}" 
          ScaleY="{Binding ElementName=zoomSlider, 
              Path=Value}" /> 
     </TabControl.LayoutTransform> 
    </TabControl> 

</DockPanel> 

답변

1

먼저 바인딩 할 AllOwners 컬렉션이 ObservableCollection인지 확인하십시오.

또한 Visual Studio에서 출력 창을 검사 할 때 첫 번째 예외가 발견되는 것을 찾으십시오. 이것은 귀하의 구속력 문제가 어디로 가는지에 대한 단서가 될 것입니다.

ItemsControl의 Items.Count 속성에 바인딩 된보기에 텍스트 블록을 넣어서 바인딩이되어 있고 아무것도 렌더링하지 않거나 제대로 바인딩되지 않았는지 확인할 수 있습니다.

ItemsControl에 이름을 지정한 후에 TextBlock에 넣어 : 있는지 확인하기 위해 귀하의 출력 창을 확인 않았다, 이것은 당신이 이미 보았다 뭔가 될 수도 있지만 당신은 바인딩 오타가있을 수 있습니다

<TextBlock Text="{Binding ElementName=itemControl1,Path=Items.Count}/> 
+0

ObservableCollection을 반환합니다. 나는 오늘 그것을 시도 할 것이고 그것으로 일어나고있는 것을 볼 것입니다. 도와 줘서 고마워! 대단히 감사합니다. – spafa9

+0

출력 창을 볼 수 있도록 제안 해 주셔서 감사합니다. 나는 예외가있다. AllOwner 컬렉션을 찾을 수 없으므로 그것을 조사하지 않을 것입니다. 다시 감사합니다. – spafa9

0

당신 추적 메시지가 나왔나?

나는 눈이 멀었지만 usercontrol이 두 번째 항목의 xaml에있는 것을 보지 못했습니다.

+0

여기는 내가 창 에 뷰를 추가 할 때입니다. ItemsControl에 이름을 지정하고 카운트를 얻고 0을 가졌기 때문에 무언가 엉망이되었습니다. 그래서 추측하여 viewModel을 잘못 바인딩했습니다. 장소가 잘못되었거나 수집이 잘못되었습니다. 나는 xaml 대신 코드로 바인딩해야하므로 데이터를 가져 오기 위해 패스 다운 자격 증명을 가져야합니다. – spafa9