你想通过打字找到列表框中的一个项目,我找到很多例子,但我觉得我做的很糟糕。
我绑定到列表框我的字典。朋友是我的班级,看起来像这样:
[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上应用此模板:
<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>
我启用文本搜索我想通过Nick搜索,Nick是朋友类的字符串属性:
IsTextSearchEnabled="True" TextSearch.TextPath="Nick"
但它不起作用。我的例子我只发现你必须启用IsTextSearchEnabled并在item对象的字符串属性上设置TextSearch.TextPath。
我做得不好。感谢您的建议。
答案 0 :(得分:2)
ListBox
的ItemsSource是朋友的集合,例如ObservableCollection<Friend>
吗?
在这种情况下,您不应在Value.
等绑定中使用Text="{Binding Value.Nick}"
。它应该只是Text="{Binding Nick}"
。否则,如果ItemsSource确实是其他内容,Nick
位于名为Value的Property中,那么在设置TextSearch.TextPath
时必须考虑到这一点,因此TextSearch.TextPath="Value.Nick"
。除此之外,TextSearch工作得很好。