即使在 SelectionMode="Single" 下,ListBox 也会选择许多项目

2023-11-21

我遇到了一些很奇怪的事情,简单的WPF应用程序

<Window x:Class="ListBoxSelection.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ListBox ItemsSource="{Binding Path=Strings}" SelectionMode="Single"/>
    </Grid>
</Window>

后面有代码

public class ViewModel
{
    public List<string> Strings { get; set; }

    public ViewModel ()
    {
        Strings = new List<string> ();
        Strings.Add ("A");
        // add many items ...
        Strings.Add ("A");
    }
}

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow ()
    {
        InitializeComponent ();

        DataContext = new ViewModel ();
    }
}

当我点击单个项目时,

Why multiple values selected?

如果我继续单击项目,它们就会聚合。单击已选择的项目不会执行任何操作。挠头,我以前曾将数据绑定到列表框,但以前从未见过这种情况。运行 Win7 (64)、VS2010,行为会出现在 .Net 3.5、.Net 3.5 Client Profile、.Net 4 和 .Net 4 Client Profile 中。

Arg,我应该提到我期待正常的、默认的、单选的行为。


丹·布莱恩特在他的评论中得到了大部分答案。

这里发生的是字符串实习。当您创建一堆具有相同值的字符串时,.Net 通过使对同一字符串值的所有引用实际上引用同一字符串对象来节省内存使用量。 (看this,例如,了解详细信息。)

我真的不知道为什么 ListBox 的行为完全如此,即第一次选择列表中的任何项目时,它会同时选择该项目和列表中的第一个项目。但当您单击新项目时,它不会取消选择,因为会检查是否SelectedItem与您刚刚单击的项目不同,但事实并非如此。

通过将 ListBox 绑定到测试对象集合,我得到了完全相同的行为:

public class TestObject
{
    public override string ToString()
    {
        return GetHashCode().ToString();
    }
}

In MainWindow.xaml:

<ListBox x:Name="MyListBox" ItemsSource={Binding}"/>

In MainWindow.xaml.cs:

ObservableCollection<TestObject> test = new ObservableCollection<TestObject>();
TestObject t = new TestObject();
test.Add(t);
test.Add(t);
test.Add(t);
test.Add(t);
test.Add(t);
test.Add(t);
MyListBox.DataContext = test;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使在 SelectionMode="Single" 下,ListBox 也会选择许多项目 的相关文章

随机推荐

  • 如何在 Xcode 4 中进行代码设计和沙箱助手应用程序?

    这就是问题 我有一个包含 HelperApp 的 MainApp Helper 应用程序用于登录项 因此我需要区分 MainApp 和 HelperApp 捆绑 ID 感谢 BuildPhase Copy 我将 HelperApp 复制到
  • X11 鼠标移动事件

    在 XLib 中创建窗口时 我提供给大家的口罩有哪些SetWindowAttributes event mask成员 我必须将什么传递给第 11 个参数XCreateWindow 我在主消息循环中寻找的事件是什么 我使用的地方XNextEv
  • 如何将 WSDL 文件转换为类文件

    我有一个 WSDL 文件 我想将 wsdl 文件转换为 Web 服务类文件 是否可以 如果是的话请详细地向我解释一下 在解决方案资源管理器中右键单击 您的项目并转到 添加服务 参考 按窗口底部的 高级 按窗口底部的 添加 Web 引用 在
  • Android TabLayout一旦切换fragment就不再显示内容

    我在我的项目中使用导航抽屉 其中有 5 个片段 在一个片段中 我在设计支持库中引入了 TabLayout 其中包括 2 个片段 一切正常 除了当我离开具有 TabLayout 的片段并切换回它时 所有内容都消失了 在 TabLayout 中
  • 悬停时从下到上更改背景

    我如何更改背景颜色a hover使用持续时间为 0 3 秒的从底部到顶部的过渡 ul li a a li li a a li li a a li ul 那可能吗 Thanks 没有办法 一般 在 CSS 中应用过渡方向 然而 我们可以解决办
  • 从多维数组中递归删除空元素和子数组

    我似乎找不到一个简单 直接的解决方案来解决 PHP 中从数组中删除空元素的老问题 我的输入数组可能如下所示 Array 0 gt Array Name gt EmailAddress gt 等等 如果有更多的数据 虽然可能没有 如果它看起来
  • 显示 UIActionSheet

    我想知道如何从屏幕底部显示 UIActionSheet 我尝试过使用showInView 方法与MainView作为显示它的视图 但我得到了MainView Undeclared error 您需要引用控制器视图 actionSheet s
  • 如何在java中以相同的顺序洗牌两个数组

    我有两个问题和答案数组 String questions Q1 Q2 Q3 String answers A1 A2 A3 I used Collections shuffle Arrays asList questions 打乱每个数组
  • Python 数组切片带有逗号?

    我想知道在切片 Python 数组时逗号的用途是什么 我有一个似乎有效的示例 但对我来说看起来很奇怪的行是 p 20 numpy log10 numpy abs numpy fft rfft data 2048 0 现在 我知道在对数组进行
  • 声明特定资源的授权

    我正在编写一个示例文件存储系统 仅用于 stackoverflow 的示例 我当前的域模型如下所示 public class User public int ID get set public string LoginIdentifier
  • 如何在 Facebook 上实现共享时将特定图像显示为缩略图?

    我正在尝试实现分享这个方法 我使用的代码如下 http www facebook com share php u my website url 现在 当 Facebook 显示时 它会在左侧显示一些缩略图 这些图片是从我的网站上挑选的 如何
  • 在完全加载之前使用 open-uri 和 nokogiri 读取 HTML

    我在用着open uri and nokogiri使用 ruby 进行一些简单的网络爬行 有一个问题 有时 html 在完全加载之前就被读取了 在这种情况下 我无法获取除加载图标和导航栏之外的任何内容 最好的告知方式是什么open uri
  • Android 在特定时间创建视频缩略图

    我已经可以从我的视频创建缩略图了 代码如下所示 videoGalleryThumbnails add ThumbnailUtils extractThumbnail ThumbnailUtils createVideoThumbnail v
  • 更改工具栏中的 ActionBarDrawerToggle 图标 android?

    我有一个带有导航抽屉和工具栏的活动 Activity public class MainActivity extends AppCompatActivity private Toolbar toolbar private CustomTex
  • 同一页面中的多个视图 MVC ASP.NET

    我想展示不同的Views在 ASP NET MVC 技术的同一页面上 怎样才能实现呢 我有来自 2 个不同表的数据 为此我有 2 个不同的表Views用于显示 如何在一个页面上显示这两个视图 有没有一个概念View在 MVC 的视图内 或者
  • 如何将 QML ScrollView 滚动到中心?

    我有这样的代码 ScrollView Image source Image高于ScrollView 我怎样才能将后者滚动到中心Image元素 尽管外表如此 ScrollView紧密相关Flickable 的确 Flickable用于控制可见
  • IEnumerator 和 IEnumerable 之间有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 谁能给我解释一下 IEnumerable 和 IEnumerator 吗 IEnumerator 和 IEnumerable 之间有什么区别 IE可枚举是一个定义一个方法的接口获取枚举器它返回一个IE
  • MYSQL 联合排序

    是否可以对第一个查询进行排序并将返回的行保留为第一个 而不对第二个查询进行排序 如果这有道理的话 我当前查询的一个例子是 SELECT FROM Devices WHERE Live true AND Category apple ORDE
  • 图自动布局算法

    为了简化问题 我有一个包含二维平面上的节点和边的图 我想要做的是单击一个按钮 它会自动布局图表以使其看起来干净 我的意思是边的最小交叉 节点之间的良好空间 甚至可能代表图形比例 加权边 我知道这对于什么是干净的图表来说完全是主观的 但是有人
  • 即使在 SelectionMode="Single" 下,ListBox 也会选择许多项目

    我遇到了一些很奇怪的事情 简单的WPF应用程序