2011-01-09 33 views
2

と入力してください。リストボックスに項目を入力したいのですが、多くの例がありますが、私は何か悪いと思います。WPFリストボックス内の項目を検索するには、

私はリストボックスの辞書にバインドします。友人が私のクラスで、それは次のようになります。私はここにリストボックスの上に独自のデータテンプレートを持つ

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

Iテキスト検索を有効にする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がValueと呼ばれるプロパティにある場合、TextSearch.TextPathを設定するときに考慮する必要があります。したがって、TextSearch.TextPath="Value.Nick"です。それ以外のTextSearchはうまくいきます。

+0

はい、それは観測可能なコレクションです。ありがとう、それは今良い仕事だ。 –

関連する問題