К сожалению, TextSearch.Text
не работает в DataTemplate. В противном случае вы могли бы сделать что-то вроде этого
<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
, и если они являются свойства зависимостей, вам придется использовать свойство изменилось CallBack
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");
}
}
}
Первый способ .. не работает для меня ... он не отображается. Только объект получает отображаемое. Не значение в этом – Relativity
@Anish Mohan: вы проверили, попадает ли метод ToString в отладчик? Если да, какое значение оно возвращает? Как вы думаете, это поможет, если я загружу свой образец проекта? –
Привет, ToString не вызвано. – Relativity