积极答复者
一个wpf,listbox数据绑定实现主从模式的问题

问题
-
Listbox指定一个源为 People类,DataTemplate用来显示详细数据,问题是这两指定源都是People类,那么这种主从联动效果的实现是内部实现的么?
是不是用于显示详细数据的DataTemplate中的TextBlock隐藏了 Source={elementName=listbox,path=slelectItem}呢?请各位wpf达人解答,谢谢了
代码如下
<Window.Resources>
<localeople x:Key="MyFriends"/>
<local:mans x:Key="Mytest"/>
<!--</SnippetSource>-->
<Style TargetType="ListBoxItem">
<Setter Property="FontFamily" Value="Verdana"/>
<Setter Property="FontSize" Value="11"/>
<Setter Property="Padding" Value="10"/>
</Style>
<!--<SnippetDetailTemplate>-->
<DataTemplate x:Key="DetailTemplate" >
<Border Width="300" Height="100" Margin="20"
BorderBrush="Aqua" BorderThickness="1" Padding="8">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="First Name:"/>
<TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=FirstName}"/>
<TextBlock Grid.Row="1" Grid.Column="0" Text="Last Name:"/>
<TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=LastName}"/>
<TextBlock Grid.Row="2" Grid.Column="0" Text="Home Town:"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=HomeTown}"/>
</Grid>
</Border>
</DataTemplate>
<!--</SnippetDetailTemplate>-->
<!--<SnippetUI>-->
</Window.Resources><StackPanel Name="myst" Height="415">
<TextBlock FontFamily="Verdana" FontSize="11"
Margin="5,15,0,10" FontWeight="Bold">My Friends:</TextBlock>
<ListBox Name="mylist" Width="200" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Source={StaticResource MyFriends}}"/>
<TextBlock FontFamily="Verdana" FontSize="11"
Margin="5,15,0,5" FontWeight="Bold">Information:</TextBlock>
<ContentControl Name="mycc" Content="{Binding Source={StaticResource MyFriends}}"
ContentTemplate="{StaticResource DetailTemplate}"/>
</StackPanel>
</Window>
答案
-
从你的代码中看出,ListBox显示数据并没有使用DataTemplate,因此在代码中这两个之间并没有关系。如果要在ListBox使用DataTemplate,请参考下面代码。
<ListBox Name="mylist" Width="200" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Source={StaticResource MyFriends}}"<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=FirstName}" />
</DataTemplate>
</ListBox.ItemTemplate></ListBox>
你是在ContentControl 中使用了DateTemplate. ContentControl中 Content绑定到People. ContentTemplate使用了DataTemplate指定了显示数据的方式.
- 已标记为答案 微软中文技术论坛Moderator 2009年6月30日 3:25
-
ListBox 默认显示数据是你的People.ToString() method 返回值 。
如果你的ToString 是下面的代码,那么将ListBox将显示FirstName, LastName,HomeTown
public override string ToString()
{
return string.Format("{0} {1} {2}", _firstName, _lastName,_homeTown);
}- 已标记为答案 微软中文技术论坛Moderator 2009年6月30日 3:25
全部回复
-
-
从你的代码中看出,ListBox显示数据并没有使用DataTemplate,因此在代码中这两个之间并没有关系。如果要在ListBox使用DataTemplate,请参考下面代码。
<ListBox Name="mylist" Width="200" IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding Source={StaticResource MyFriends}}"<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=FirstName}" />
</DataTemplate>
</ListBox.ItemTemplate></ListBox>
你是在ContentControl 中使用了DateTemplate. ContentControl中 Content绑定到People. ContentTemplate使用了DataTemplate指定了显示数据的方式.
- 已标记为答案 微软中文技术论坛Moderator 2009年6月30日 3:25
-
ListBox 默认显示数据是你的People.ToString() method 返回值 。
如果你的ToString 是下面的代码,那么将ListBox将显示FirstName, LastName,HomeTown
public override string ToString()
{
return string.Format("{0} {1} {2}", _firstName, _lastName,_homeTown);
}- 已标记为答案 微软中文技术论坛Moderator 2009年6月30日 3:25