我可以使用多重绑定进行文本搜索吗
我在 mvvm-wpf 应用程序中有以下组合框。我需要在此实现“文本搜索”(以及多重绑定)。有人可以帮我吗?
<StackPanel Orientation="Horizontal">
<TextBlock Text="Bid Service Cat ID"
Margin="2"></TextBlock>
<ComboBox Width="200"
Height="20"
SelectedValuePath="BidServiceCategoryId"
SelectedValue="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
Path=DataContext.SelectedBidServiceCategoryId.Value}"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
Path=DataContext.BenefitCategoryList}"
Margin="12,0">
<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>
</ComboBox>
</StackPanel>
I have below combo box in mvvm-wpf application. I need to implement "Text search" in this..(along with multibinding). Can anybody help me please.
<StackPanel Orientation="Horizontal">
<TextBlock Text="Bid Service Cat ID"
Margin="2"></TextBlock>
<ComboBox Width="200"
Height="20"
SelectedValuePath="BidServiceCategoryId"
SelectedValue="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
Path=DataContext.SelectedBidServiceCategoryId.Value}"
ItemsSource="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}},
Path=DataContext.BenefitCategoryList}"
Margin="12,0">
<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>
</ComboBox>
</StackPanel>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不幸的是,
TextSearch.Text
在 DataTemplate 中不起作用。否则你可以做这样的事情但是这是行不通的,所以我看到了你的问题的两种解决方案。
第一种方式
您将
ComboBox
的IsTextSearchEnabled
设置为True
,覆盖源类中的ToString
并更改MultiBinding
到TextBlock
中的Binding
Xaml
源类
第二种方式
如果您不想覆盖 ToString,我认为您必须在源类中引入一个新的属性,其中将
BidServiceCategoryId
和BidServiceCategoryName
组合为TextSearch .TextPath
。在此示例中,我将其称为 BidServiceCategory。为此,您必须在BidServiceCategoryId
或BidServiceCategoryName
发生更改时调用OnPropertyChanged("BidServiceCategory");
。如果它们是普通的 CLR 属性,您可以在set
中执行此操作,如果它们是依赖项属性,您必须使用属性更改回调Xaml
源类
Unfortunately,
TextSearch.Text
doesn't work in a DataTemplate. Otherwise you could have done something like thisHowever this won't work, so I see two solutions to your problem.
First way
You set
IsTextSearchEnabled
toTrue
for theComboBox
, overrideToString
in your source class and change theMultiBinding
in theTextBlock
to aBinding
Xaml
Source class
Second Way
If you don't want to override ToString I think you'll have to introduce a new Property in your source class where you combine
BidServiceCategoryId
andBidServiceCategoryName
for theTextSearch.TextPath
. In this example I call it BidServiceCategory. For this to work, you'll have to callOnPropertyChanged("BidServiceCategory");
whenBidServiceCategoryId
orBidServiceCategoryName
changes as well. If they are normal CLR properties, you can do this inset
, and if they are dependency properties you'll have to use the property changed callbackXaml
Source class
我不知道您的文本搜索是否必须搜索所有文本,但如果您想从类别 ID 进行搜索,只需将 TextSearch.TextPath 属性设置为 BidServiceCategoryId 即可。这对于想要使用多重绑定并发现文本搜索不再起作用的任何人也应该有所帮助...如果您显式设置 TextPath 属性,它确实会起作用。
I don't know if your text search has to search ALL the text, but if you want to search from the category ID, you can just set the TextSearch.TextPath property to BidServiceCategoryId. That should also be helpful for anyone who wants to use multibinding and finds that the text search no longer works... It does work if you explicitly set the TextPath property.