Я нахожу элемент в WPF ListBox, набрав - PullRequest
2 голосов
/ 09 января 2011

Привет, я хотел бы найти элемент в списке, набрав, я нахожу много примеров, но думаю, что-то я делаю плохо.

Я привязываю к списку свой словарь.Друг мой класс, это выглядит так:

 [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; }

    }

У меня есть собственный шаблон данных в списке вот оно:

 <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>

Я применяю этот шаблон в списке:

<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>

Я включаю текстовый поиск. Я хочу выполнить поиск по Нику, Ник является строковым свойством класса Friend:

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

Но это не работает.В примерах я нахожу только то, что вы должны включить IsTextSearchEnabled и установить TextSearch.TextPath на строковое свойство объекта item.

Что я делаю плохо.Спасибо за совет.

1 Ответ

2 голосов
/ 09 января 2011

Является ли ItemsSource ListBox коллекцией Друга, как ObservableCollection<Friend>?
В этом случае вы не должны использовать Value. в привязках, таких как Text="{Binding Value.Nick}" и т. Д. Это должно быть просто Text="{Binding Nick}". В противном случае, если ItemsSource действительно является чем-то другим, где Nick находится в свойстве с именем Value, то вы должны учитывать это при установке TextSearch.TextPath, поэтому TextSearch.TextPath="Value.Nick". Кроме этого, TextSearch работает просто отлично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...