当前位置: 首页 > 知识库问答 >
问题:

combobox和listview绑定问题wpf c#

乐欣可
2023-03-14

我有一个组合框,它在下拉列表中显示listview,我遵循MVVM模式,我也在我的Viewmodel中设置了公共属性,当我将其分配给标签时,它工作正常,但对于组合框,它似乎不依赖于我的绑定。我尝试了很多方法,但都找不到问题所在。

XAML:

 <ComboBox Name="SearchBox" IsEditable="True"  Background="White"  md:HintAssist.Hint="Search MUID"    Grid.Column="1" Margin="5 0 0 0" 
                  Grid.Row="0"  Height="40" Width="400"  HorizontalContentAlignment="Left" HorizontalAlignment="Left" SelectedItem="{Binding ElementName=lstview ,Path=SelectedItem}" >
                                <ComboBoxItem>
                                <ListView x:Name="lstview" ItemsSource="{Binding filterSW}" 
                    SelectedItem="{Binding SelectedMU}" 
                     Height="200" ScrollViewer.VerticalScrollBarVisibility="Visible">
                                    <ListView.View>
                                        <GridView>
                                            <GridViewColumn Width="130"  Header="Mu-ID"    />
                                            <GridViewColumn Width="130" Header="MU-Identifier" DisplayMemberBinding="{Binding MU_Identifier}"  />
                                            <GridViewColumn Width="130"  Header="Status" DisplayMemberBinding="{Binding RequestType}" />
                                            <GridViewColumn Width="130" Header="UniqueID"  />
                                        </GridView>
                                    </ListView.View>
                                </ListView>
                                </ComboBoxItem>
                            </ComboBox>

当我使用公共属性并访问它的元素时,这对我来说很好,我还尝试设置text={绑定选择MU.MU_Identifier}和选择值,但它不起作用。

 <Label Grid.Column="3" HorizontalAlignment="Center"  Background="GreenYellow" Content="{Binding SelectedMU.MU_Identifier}"></Label>

共有1个答案

陶涵育
2023-03-14

看起来您正试图在ComboBox下拉列表中显示一个多栏列表,而不是每个项目仅显示一个文本行的标准列表。

为了实现这种效果,您在下拉列表中放置了一个ListView

不幸的是,这是行不通的。

ComboBoxListView都源自Sseltor,这是一个允许从列表中选择项目的抽象。这将属性SseltedItem限制为列表中包含的项目之一。如果您尝试为该属性分配列表中没有的任何值,则该分配将不起作用,并且该属性将保留您分配之前的值。

现在,列表可以直接在XAML中指定,也可以作为属性ItemsSource的绑定提供。对于ListView,您可以正确地进行绑定。但是对于ComboBox,您不指定该绑定。相反,您只指定了一个类型为ComboBoxItem的项目,该项目包含整个ListBox作为其值。因此,唯一可以成功分配给ComboBox选择项属性的值是单个ComboBoxItem。但是您的绑定永远不会分配该值,这就是为什么ComboBox在关闭时永远不会显示任何内容。

当它打开时,确实会显示包含列表视图的单个项目,但这只是一种光学效果。数据狂欢是行不通的。它之所以适用于标签,是因为标签不受约束,可以显示列表视图要求它显示的任何内容。

只有当两个控件对ItemsSourceSelectedItem属性具有相同的绑定时,才能同步ListViewComboBox。但在这种情况下,您将无法将列表视图放在下拉列表中。

最接近您想要的是定制组合框的模板,如中所述https://zamjad.wordpress.com/2012/08/15/multi-columns-combo-box例如与ListView相比,这不会给您提供列标题。此外,这些列在下拉列表中的间隔是均匀的,但这就是您在列表视图中的内容。

如果要自动调整它们的大小,需要将Width=“auto”SharedSizeGroup=“cN”添加到每个ColumnDefinition中,其中“cN”应该有列号而不是N,以使它们在网格中唯一,并添加网格。IsSharedSizeScope=“True”

这对于人们希望简单得多的东西来说是一个很大的麻烦,但是,不幸的是,您不能将列表视图放在组合框的模板中,这是基类选择器如何处理其项目列表的一个限制。

如果你愿意考虑第三方控制库,还有其他选择。我和Syncfusion合作过,他们有SfMultiColumnDropDown,它可以满足你的需求。我很确定其他流行的库也有类似的控件。

 类似资料:
  • 我有一个ListView,并设置了ItemContainerStyle,但我仍然遇到同样的问题。请帮忙

  • 问题内容: 我正在尝试进入instagram页面,但没有运气。我不断收到错误和空白的屏幕截图。 错误文字: Casperjs –version是1.1.0-beta3。 基本上,我使用以下代码: 问题答案: 如果使用了PhantomJS 2,则不再需要下面的垫片。不幸的是,CasperJS1.1-beta3还不支持它,因此您可能想要使用GitHub的master分支。 问题是PhantomJSv1

  • 现在,我正在尝试让ListView具有一些可绑定的CustomCells。我将XAML中的单元格定义为DataTemplate下的ViewCell和ListView.ItemTemplate下的ViewCell。 为了简单起见,让我们假设我在单元格中表示了两个字符串。ViewCell看起来如下所示: 编辑1: 我尝试编写一个模仿一些示例的文件,但这还不够。没有一段代码解释该文件是XAML中表示Vi

  • 我试图按照Angular文档中的英雄教程开始学习Angular,但当我开始改变一些事情时,出现了一些问题: > 对于我的项目,我使用Django rest框架作为后端,提供用于检索我的“书籍项目”的应用编程接口。我在这方面非常新,所以我只想知道API设置是否正确,但我不知道怎么做。 我开始在django中实现模型,然后是序列化器、视图集,最后是网址。 在angular中,我为http请求编写了服务

  • 我正在使用一个listview,每个项目都使用一个从带有asynctask类的服务器调用的映像。 问题是,当图像被接收时,ImageView不是好的图像。并且所有图片都加载在ListView的第一项中。 但在滚动过程中调用listview运动时会被剪切。 我有什么可能避免这些问题?我希望得到与GooglePlay的ListView相同的结果。 提前致谢:)

  • Spring Boot属性解析程序面临一个奇怪的问题。 正在尝试为其中一个属性执行简单的@Value。在调试日志中,我看到该属性已匹配,但稍后报告为找不到几行。知道怎么回事吗? Java代码: 记录在下面