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}/>
这可能是一些你已经看了看,但你可能有约束力的错字,你检查你的输出窗口,看看你获取任何跟踪消息?
我想我是盲目的,但我没有看到你的用户控件在第二个条目的xaml中的位置。
这是我添加窗口视图
我正在返回一个ObservableCollection。我今天会尝试一下,看看它发生了什么。谢谢你的帮助!非常感谢。 – spafa9 2010-07-16 13:17:43
非常感谢您提供查看输出窗口的建议。我确实有例外。它无法找到AllOwner集合,所以我没有看着它。再次感谢你。 – spafa9 2010-07-16 13:38:36