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