none
一个wpf,listbox数据绑定实现主从模式的问题 RRS feed

  • 问题

  • Listbox指定一个源为 People类,DataTemplate用来显示详细数据,问题是这两指定源都是People类,那么这种主从联动效果的实现是内部实现的么?

    是不是用于显示详细数据的DataTemplate中的TextBlock隐藏了 Source={elementName=listbox,path=slelectItem}呢?请各位wpf达人解答,谢谢了

     

    代码如下

    <Window.Resources>
        <localStick out tongueeople 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>

    2008年11月25日 2:53

答案

  •    从你的代码中看出,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指定了显示数据的方式.

        


     

     

     

    2008年12月15日 9:55
  • ListBox 默认显示数据是你的People.ToString() method 返回值 。

    如果你的ToString 是下面的代码,那么将ListBox将显示FirstName,  LastName,HomeTown

    public override string ToString()
            {
                return string.Format("{0} {1} {2}", _firstName,  _lastName,_homeTown);
            }

    2008年12月16日 9:22

全部回复

  •    从你的代码中看出,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指定了显示数据的方式.

        


     

     

     

    2008年12月15日 9:55
  • ListBox 默认显示数据是你的People.ToString() method 返回值 。

    如果你的ToString 是下面的代码,那么将ListBox将显示FirstName,  LastName,HomeTown

    public override string ToString()
            {
                return string.Format("{0} {1} {2}", _firstName,  _lastName,_homeTown);
            }

    2008年12月16日 9:22