Wpf绑定视图到ViewModel添加到wpf窗口

问题描述:

我有一个视图,其中包含一个ItemsControl与一些文本框内显示名称和其他信息。在我的窗口中,我将视图添加到窗口如下,并在窗口后面的代码中,我将视图的datacontext绑定到MainWindow Loaded事件中的视图模型,如下所示ViewOwnerSideBar.DataContext = viewModel应用程序编译,但是当我运行它我没有获取数据?我检查了我的viewmodel,并且我收集的数据中有我返回的数据。有没有人有任何如何做到这一点的好例子。我将在右侧显示侧边栏视图和主视图,以显示所有者的详细信息。Wpf绑定视图到ViewModel添加到wpf窗口

这是我的看法

<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> 

首先,确保您绑定的AllOwners集合是ObservableCollection。

另外,执行时在Visual Studio中检查输出窗口,查找被捕获的第一次机会异常。这将成为你绑定问题出现的线索。

我喜欢在ItemControl上绑定到Items.Count属性的View上放置一个textblock,以便您可以查看它是否绑定,并且不呈现任何内容或没有正确绑定。

给ItemsControl的一个名字,然后把一个文本块中:

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

我正在返回一个ObservableCollection。我今天会尝试一下,看看它发生了什么。谢谢你的帮助!非常感谢。 – spafa9 2010-07-16 13:17:43

+0

非常感谢您提供查看输出窗口的建议。我确实有例外。它无法找到AllOwner集合,所以我没有看着它。再次感谢你。 – spafa9 2010-07-16 13:38:36

这可能是一些你已经看了看,但你可能有约束力的错字,你检查你的输出窗口,看看你获取任何跟踪消息?

我想我是盲目的,但我没有看到你的用户控件在第二个条目的xaml中的位置。

+0

这是我添加窗口视图我有一些搞砸了,因为我在ItemsControl上放了一个名字,并得到了计数,并有0,所以我的猜测是我已经绑定了viewModel的错误地点或收集不正确。我必须传递证书才能获取数据,所以我必须将其绑定到代码而不是xaml。 – spafa9 2010-07-20 14:07:07