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

Wpf将视图绑定到ViewModel添加到Wpf窗口,wpf,xaml,mvvm,binding,Wpf,Xaml,Mvvm,Binding,我有一个视图,其中包含一个ItemsControl,其中包含一些文本块,用于显示名称和其他信息。在我的窗口中,我将视图添加到窗口中,如下所示;在窗口的代码隐藏中,我将视图的datacontext绑定到主窗口加载事件中的视图模型,如下所示:ViewOwnerSideBar.datacontext=viewModel应用程序进行编译,但当我运行它时,我不获取数据?我检查了我的viewmodel,我的集合中确实有返回的数据。有没有人有好的例子来说明如何做到这一点。我将在右边有一个侧栏视图和一个主视图,

我有一个视图,其中包含一个ItemsControl,其中包含一些文本块,用于显示名称和其他信息。在我的窗口中,我将视图添加到窗口中,如下所示;在窗口的代码隐藏中,我将视图的datacontext绑定到主窗口加载事件中的视图模型,如下所示:ViewOwnerSideBar.datacontext=viewModel应用程序进行编译,但当我运行它时,我不获取数据?我检查了我的viewmodel,我的集合中确实有返回的数据。有没有人有好的例子来说明如何做到这一点。我将在右边有一个侧栏视图和一个主视图,显示所有者的详细信息

这是我的看法

<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集合是可观察集合

另外,在执行时检查VisualStudio中的“输出”窗口,查找捕获的第一次异常。这将是您的绑定问题所在的线索

我喜欢在绑定到Items.Count属性的视图上放置一个textblock,以便您可以查看它是否绑定、未呈现任何内容或未正确绑定

为ItemsControl指定一个名称,然后在其中放置一个文本块:

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

首先,确保绑定到的AllOwners集合是一个ObservableCollection

另外,在执行时检查VisualStudio中的“输出”窗口,查找捕获的第一次异常。这将是您的绑定问题所在的线索

我喜欢在绑定到Items.Count属性的视图上放置一个textblock,以便您可以查看它是否绑定、未呈现任何内容或未正确绑定

为ItemsControl指定一个名称,然后在其中放置一个文本块:

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

这可能是您已经查看过的内容,但您可能有绑定输入错误,您是否检查了输出窗口以查看是否收到任何跟踪消息


我猜我是瞎子,但我看不到你的用户控件在第二个条目的xaml中的位置。

这可能是你已经看过的内容,但是你可能有一个绑定错误,你是否检查过你的输出窗口以查看是否有任何跟踪消息


我猜我是瞎子,但我看不到你的用户控件在第二个条目的xaml中的位置。

我返回了一个ObservableCollection。我今天会试试看,看看会发生什么。谢谢你的帮助!非常感谢。非常感谢您提出查看输出窗口的建议。我确实有个例外。它找不到AllOwner系列,所以我没有调查它。再次感谢。我将返回一个可观察的集合。我今天会试试看,看看会发生什么。谢谢你的帮助!非常感谢。非常感谢您提出查看输出窗口的建议。我确实有个例外。它找不到AllOwner系列,所以我没有调查它。再次感谢。这是我将视图添加到窗口的地方。我有点搞砸了,因为我在ItemsControl上输入了一个名称,得到了计数,得到了0,所以我猜我将viewModel绑定到了错误的位置,或者集合不正确。我必须向下传递凭据才能获取数据,因此我必须在代码中绑定它,而不是在xaml中。这就是我将视图添加到窗口的地方。我遇到了一些问题,因为我在ItemsControl上输入了一个名称,得到了计数,得到了0,所以我猜我将viewModel绑定到了错误的位置,或者集合不正确。我必须向下传递凭据才能获取数据,因此我必须用代码而不是xaml绑定它。