К сожалению, TextSearch.Text
не работает в шаблоне данных. В противном случае вы могли бы сделать что-то вроде этого
<ComboBox ...>
<ComboBox.ItemContainerStyle>
<Style TargetType="{x:Type ComboBoxItem}">
<Setter Property="TextSearch.Text">
<Setter.Value>
<MultiBinding StringFormat="{}{0}: {1}">
<Binding Path="BidServiceCategoryId"/>
<Binding Path="BidServiceCategoryName"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>
Однако это не сработает, поэтому я вижу два решения вашей проблемы.
Первый путь
Вы устанавливаете IsTextSearchEnabled
в True
для ComboBox
, переопределяете ToString
в своем исходном классе и изменяете MultiBinding
в TextBlock
на Binding
Xaml
<ComboBox ...
IsTextSearchEnabled="True">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
Исходный класс
public class TheNameOfYourSourceClass
{
public override string ToString()
{
return String.Format("{0}: {1}", BidServiceCategoryId, BidServiceCategoryName);
}
//...
}
Второй путь
Если вы не хотите переопределять ToString, я думаю, вам нужно будет ввести новое свойство в свой исходный класс, где вы объедините BidServiceCategoryId
и BidServiceCategoryName
для TextSearch.TextPath
. В этом примере я называю это BidServiceCategory. Чтобы это работало, вам нужно будет позвонить OnPropertyChanged("BidServiceCategory");
, когда BidServiceCategoryId
или BidServiceCategoryName
также изменится. Если они являются обычными свойствами CLR, вы можете сделать это в set
, а если они являются свойствами зависимостей, вам придется использовать обратный вызов измененного свойства
Xaml
<ComboBox ...
TextSearch.TextPath="BidServiceCategory"
IsTextSearchEnabled="True">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock DataContext="{Binding}">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0}: {1}">
<Binding Path="BidServiceCategoryId" />
<Binding Path="BidServiceCategoryName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
Исходный класс
public class TheNameOfYourSourceClass
{
public string BidServiceCategory
{
get
{
return String.Format("{0}: {1}", BidServiceCategoryId, BidServiceCategoryName);
}
}
private string m_bidServiceCategoryId;
public string BidServiceCategoryId
{
get
{
return m_bidServiceCategoryId;
}
set
{
m_bidServiceCategoryId = value;
OnPropertyChanged("BidServiceCategoryId");
OnPropertyChanged("BidServiceCategory");
}
}
private string m_bidServiceCategoryName;
public string BidServiceCategoryName
{
get
{
return m_bidServiceCategoryName;
}
set
{
m_bidServiceCategoryName = value;
OnPropertyChanged("BidServiceCategoryName");
OnPropertyChanged("BidServiceCategory");
}
}
}