2011-01-09 4 views
2

안녕하세요. 목록 상자에서 항목을 찾고 싶습니다. 많은 예제를 찾았지만 좋지 않은 것 같아요.WPF ListBox에서 항목을 찾을 수 있습니다.

목록 상자에 바인딩합니다. 친구가 내 수업, 그것은 다음과 같이 :

[JsonObject] 
    [Export] 
    public class Friend 
    { 
     public override string ToString() 
     { 
      return Nick; 
     } 

     [JsonProperty("idUser")] 
     public string IdUser { get; set; } 

     [JsonProperty("nick")] 
     public string Nick { get; set; } 

     [JsonProperty("sefNick")] 
     public string SefNick { get; set; } 

     [JsonProperty("isFriend")] 
     public bool IsFriend { get; set; } 

     [JsonProperty("status")] 
     public int Status { get; set; } 

    } 

를 내가 여기에 목록 상자에 자신의 데이터 템플릿을해야 함은 다음과 같습니다

<ListBox Name="Friends" 
     SelectedIndex="{Binding Path=SelectedFriendsIndex,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
     SelectedItem="{Binding Path=SelectedFriend, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}" 
     Style="{DynamicResource friendsListStyle}" 
     IsTextSearchEnabled="True" TextSearch.TextPath="Nick" 
</ListBox> 

I :

<Style x:Key="friendsListStyle" TargetType="{x:Type ListBox}"> 
     <Setter Property="ItemTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <Grid Name="RootLayout"> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="0.3*"></ColumnDefinition> 
          <ColumnDefinition Width="*"></ColumnDefinition> 
         </Grid.ColumnDefinitions> 
         <Grid.RowDefinitions> 
          <RowDefinition Height="60"></RowDefinition> 
         </Grid.RowDefinitions> 
         <Image Margin="4,4,4,2" Grid.Column="0"> 
          <Image.Source > 
           <MultiBinding Converter="{StaticResource imageConverter}"> 
            <Binding Path="Value.ProfilePhoto"></Binding> 
            <Binding Path="Value.Status"></Binding> 
           </MultiBinding> 
          </Image.Source> 
         </Image> 
         <Grid Grid.Column="1"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*"></ColumnDefinition> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="*"></RowDefinition> 
           <RowDefinition Height="*"></RowDefinition> 
           <RowDefinition Height="*"></RowDefinition> 
          </Grid.RowDefinitions> 
          <TextBlock 
            Text="{Binding Value.Nick}" 
            Margin="2,2,2,2" 
            FontSize="13" 
            FontWeight="Medium" 
            Grid.Column="0" Grid.Row="0"> 
          </TextBlock> 
          <TextBlock 
            Text="{Binding Value.BlockQuote}" 
            FontSize="11" 
            FontWeight="Normal" 
            Foreground="DarkGray" 
            Grid.Column="0" Grid.Row="1" Margin="2,2,2,2"></TextBlock> 
          <TextBlock 
            Text="{Binding Value.Status,Converter={StaticResource statusConverter}}" 
            Style="{StaticResource StatusStyle}" 
            Grid.Column="0" Grid.Row="2" > 
          </TextBlock> 
         </Grid> 
        </Grid> 
        <DataTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="true"> 
         <Setter Property="LayoutTransform" TargetName="RootLayout"> 
          <Setter.Value> 
           <ScaleTransform ScaleX="1.25" ScaleY="1.25" /> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
        </DataTemplate.Triggers> 
       </DataTemplate> 
      </Setter.Value> 

내가 목록 상자에이 템플릿을 적용 텍스트 검색 사용 가능 Nick 님의 검색을 원합니다. Nick은 Friend 클래스의 문자열 속성입니다.

IsTextSearchEnabled="True" TextSearch.TextPath="Nick" 

하지만 작동하지 않습니다. 나는 IsTextSearchEnabled를 활성화하고 Item 객체의 string 속성에 TextSearch.TextPath를 설정해야한다는 것을 알게되었습니다.

내가 싫어하는 것. 조언을 주셔서 감사합니다.

답변

1

ObservableCollection<Friend>과 같이 ListBox의 ItemsSource가 Friend 컬렉션입니까?
그런 경우 Text="{Binding Value.Nick}" 등과 같은 바인딩에서 Value.을 사용하면 안됩니다.이 값은 Text="{Binding Nick}"이어야합니다. 그렇지 않으면 ItemsSource가 실제로 뭔가 다른 경우, Nick이 값이라는 속성에있는 경우 TextSearch.TextPath을 설정할 때이를 고려해야하므로 TextSearch.TextPath="Value.Nick"입니다. 그 외에 TextSearch는 잘 작동합니다.

+0

예, 관찰 가능한 컬렉션입니다. 고마워, 이제는 잘된거야. –

관련 문제