如何在 WPF 中实现复选框列表框?

2023-12-23

尽管在编写 Winforms 应用程序方面有一定的经验,但 WPF 的“模糊性”在最佳实践和设计模式方面仍然让我困惑。

尽管在运行时填充我的列表,但我的列表框显示为空。

我已按照以下简单说明进行操作这篇有用的文章 http://merill.net/2009/10/wpf-checked-listbox/无济于事。我怀疑我错过了某种DataBind()方法,我告诉列表框我已完成修改底层列表。

在我的 MainWindow.xaml 中,我有:

    <ListBox ItemsSource="{Binding TopicList}" Height="177" HorizontalAlignment="Left" Margin="15,173,0,0" Name="listTopics" VerticalAlignment="Top" Width="236" Background="#0B000000">
        <ListBox.ItemTemplate>
            <HierarchicalDataTemplate>
                <CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked}"/>
            </HierarchicalDataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

在我的代码隐藏中,我有:

    private void InitializeTopicList( MyDataContext context )
    {
        List<Topic> topicList = ( from topic in context.Topics select topic ).ToList();

        foreach ( Topic topic in topicList )
        {
            CheckedListItem item = new CheckedListItem();
            item.Name = topic.DisplayName;
            item.ID = topic.ID;
            TopicList.Add( item );
        }
    }

通过追踪,我知道其中填充了四个项目。

EDIT

我变了TopicList to an ObservableCollection。它仍然不起作用。

    public ObservableCollection<CheckedListItem> TopicList;

EDIT #2

我做了两项有帮助的更改:

在 .xaml 文件中:

ListBox ItemsSource="{Binding}"

在填充列表后的源代码中:

listTopics.DataContext = TopicList;

我得到了一个列表,但当我刷新这些复选框时,它不会自动更新复选框状态。我怀疑我进一步阅读会解决这个问题。


假设TopicList不是一个ObservableCollection<T>因此,当您添加项目时,没有INotifyCollectionChanged 被触发以告诉绑定引擎更新值。

改变你的TopicList to an ObservableCollection<T>这将解决当前的问题。您还可以填充List<T>提前,然后绑定将通过 OneWay 进行;然而ObservableCollection<T>是一种更稳健的方法。

EDIT:

Your TopicList需要是属性而不是成员变量;绑定需要属性。确实如此not需要成为DependencyProperty.

EDIT 2:

修改你的ItemTemplate因为它不需要是HierarchicalDataTemplate

   <ListBox.ItemTemplate>
     <DataTemplate>
       <StackPanel>
         <CheckBox Content="{Binding Name}" IsChecked="{Binding IsChecked}"/>
       </StackPanel>
     </DataTemplate>
   </ListBox.ItemTemplate>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 WPF 中实现复选框列表框? 的相关文章

  • 获取代码中的绑定结果

    我可能正在以错误的方式寻找这个 但是 有没有办法通过代码获取绑定的结果值 可能是一些显而易见的东西 但我就是找不到它 您只需致电ProvideValue的绑定方法 困难的部分是你需要通过有效的IServiceProvider到方法 编辑 实
  • 比较运算符性能 <= 与 !=

    让我们首先声明代码可读性胜过微优化 我们应该将其留给编译器 这只是一个奇怪的案例 具体细节似乎与一般建议相比很有趣 因此 我在搞素数生成器函数 并提出了一种奇怪的行为 其中 人们建议效率最高 实际上效率最低 而 C private stat
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • VisualStateManager 和生成的转换

    正当我以为我明白的时候VisualStateManager 有些事情证明我错了 我正在使用 WPF 4 并且尝试简单地在鼠标悬停时放大某个项目 并在鼠标离开时将其缩小 我想我只需定义每个状态VisualStateGroup然后指定一个Vis
  • ListView ItemContainerStyle 模板

    我创建了用作 ListView 项目模板的样式 其中包含 CheckBox 和 TextBlock
  • 如何从代码隐藏访问ListBox动态创建的项目的属性?

    XAML
  • 先学Silverlight还是先学WPF?

    看来 Silverlight WPF 是 NET 用户界面开发的长期未来 这很棒 因为我可以看到在客户端和 Web 开发端重用 XAML 技能的优势 但看看 WPF XAML Silverlight 它们似乎是非常庞大的技术 那么从哪里开始
  • CommandManager.InvalidateRequerySuggested 不会导致对 MVVM-Light 中的 CanExecute 进行重新查询

    我正在使用 MVVM Light RelayCommand private ICommand myRevertCmd public ICommand Revert get if myRevertCmd null myRevertCmd ne
  • WPF 绑定 CompositeCollection 中的 MenuItem 不起作用

    我在将命令绑定到复合集合中的菜单项时遇到问题 这MenuItem是其一部分ContextMenu这是定义在UserControl Resources 问题是新标签的绑定不起作用 当我将 MenuItem 放置在复合集合之外时 它将起作用 有
  • ScrollViewer 滚动条始终禁用

    我是 xaml 和 wpf 的新手 我正在尝试将一些用户控件从代码隐藏插入到容器中 我已阅读此博客文章MSDN http blogs msdn com b marcelolr archive 2009 06 09 stackpanel do
  • WPF ListView/Gridview 允许用户选择多个项目并将它们分组在一起

    我在 MVVM 应用程序中有一个 WPF ListView GridViwe GridView 绑定到 ViewModel 中的列表 要求是用户应该能够选择网格视图的多行 右键单击它并看到上下文菜单 将这些行组合在一起 选择后 所有这些项目
  • 如何使用 ng-repeat 复选框和 Angularjs 过滤表格

    曾几何时 这是可行的 但不知何故它被破坏了 我希望能够使用 ng repeat 生成复选框 以根据存储的数据获取所需数量的复选框 并使用它们来过滤生成的表 此外 我不希望重复复选框的相同值 我用代码做了一个plnkr div class r
  • WPF控件默认大小

    为 wpf 应用程序定义自定义资源主题时 我可以设置宽度 高度等 如何找到这些属性的默认值 即框架中提供的控件中使用的值 WPF 控件通常不包含任何类型的默认大小 WPF 的主要功能点之一是 除非您指定大小 否则所有内容都会动态调整大小 如
  • PreviewKeyDown 不会在 ElementHost 中针对 Tab 和箭头键触发

    我在 Winforms ElementHost 中有一个 WPF 窗口 我的窗口上的 Tab 键和箭头键不会触发 KeyDown 和 PreviewKeyDown 事件 KeyUp 和 PreviewKeyUp 似乎工作正常 Preview
  • 如何以编程方式调用应用程序菜单?

    我有自定义样式的非矩形透明窗口
  • 是什么导致 WPF 打印机输出被光栅化?

    我在 WPF 中遇到了许多打印问题 其中正在打印的特定项目组合会突然触发打印机输出的光栅化 导致打印机输出丑陋且庞大 并可能导致打印每页需要 30 秒 我发现在控件上设置任何级别的不透明度之类的事情通常会触发此问题 我忘记了它还有什么作用
  • 从一张图像复制 ROI 并复制到 wpf 中的另一张图像

    我想开发一个具有以下签名的函数 CopyImage ImageSource inputImage Point inTopLeft Point InBottomRight ImageSource outputImage Point outTo
  • 阻止 WPF 文本框增长

    我花了两个小时研究如何避免在输入长文本时我的 WPF TextBox 控件变长 但我无法做到这一点 即使我读过一些关于它的答案 如下所示 停止 wpf textbox from grow with text https stackoverf
  • 元素属性语法和属性属性语法之间有语义差异吗?

    我认为元素属性语法和属性属性语法在语义上没有太大区别 但是 我发现一定有什么不同 例如 下面的例子只是演示了一个简单的触发器
  • WPF - 关闭 App.g.cs 中 Main 的自动生成

    我正在学习WPF 我想在 App xaml cs 中提供我自己的 Main 方法 而不是在 App g cs 中为我生成一个方法 然而 我不断遇到冲突 因为我还没有找到如何阻止生成额外的 Main 我的项目文件或其他地方是否有控制此设置的设

随机推荐

  • C++11 中 2D 向量构造的重大变化是什么?

    在阅读答案时MS Connect 网站上的一个问题 http connect microsoft com VisualStudio feedback details 691756 std make pair error in vc11我注意
  • 如何使用lua设置bash环境变量

    我对 lua 脚本功能很陌生 我尝试使用 os execute 导出 MY VAR 10 io popen 导出 MY VAR 10 来自lua脚本 我尝试在执行 lua 脚本后使用 echo MY VAR 从 shell 读取 MY VA
  • 检查一个列表中的任何元素是否在另一个列表中[重复]

    这个问题在这里已经有答案了 我正在尝试比较两个列表 如果第一个列表中的任何值在第二个列表中 则简单地打印一条消息 def listCompare list1 1 2 3 4 5 list2 5 6 7 8 9 if list1 in lis
  • 缺少样式。是否为此布局选择了正确的主题?

    缺少样式 是否为此布局选择了正确的主题 使用布局上方的主题组合框选择不同的布局 或修复主题样式参考 找不到款式mapViewStyle在当前主题中 我尝试了所有可用的解决方案来解决这个问题 但似乎没有任何效果 我已将库包含在清单文件中 我什
  • Sql Server:当“强制外键约束”设置为“否”时,使用它有什么好处?

    我知道 RDBMS 中 强制外键约束 的目的 但是设置为 NO 有什么好处吗 在正常生产中 此设置应该never被设置为NO 但是 当您开发或重组数据库时 或者当您执行诸如以下操作时 您需要 清理 清理 大量数据 那么关闭外键约束以允许将
  • 主从视图 ASP.NET MVC

    我是 MVC 新手 参与了一个使用 ASP NET MVC 1 0 开发的项目 我的 JavaScript 也很弱 我试图演示主详细信息视图如何在 Northwind 数据库中的 订单 和 订单详细信息 表上工作 因此 表之间存在关系 即一
  • 如何找到多维数组中最长的字符串?

    我试图从多维数组中获取最长的字符串 但由于某种原因它不起作用 这就是我所拥有的 a MAKKGKPRPDHRPPAHNPHYAHDPPPYSQQQPPLQQQNYAQQMNRQHARPRPSPPSEVSDCVKYSLFLYNCIFWVSMH
  • InputBindings 仅在聚焦时才起作用

    我设计了一个可重用的用户控件 它包含 UserControl InputBindings 它非常简单 因为它只包含一个标签和一个按钮 以及新属性等 当我在窗口中使用该控件时 它运行良好 但键绑定仅在聚焦时才起作用 当一个控件绑定到 alt
  • Android 应用程序:获取 Google Drive API 的访问令牌

    我正在编写一个 Android ICS 版本 应用程序 它将数据上传到 Google Drive 该应用程序 使用 oauth2 获取访问令牌 第一步 获取授权令牌 String AUTH TOKEN TYPE oauth2 https w
  • Java 32位与64位优化模式(-XX:-UseCompressedOops)内存开销

    我试图预测当我在配置为使用超过 32GB 内存的 JVM 中运行 Java 应用程序时的堆内存需求变化 我预计 在将 Xmx 参数从 32GB 重新配置到 64GB 后 我在内存中保留的相同数量的 有用 对象将会产生显着的内存开销 我尝试通
  • 在类之间传递记录器

    我的项目中有两个类 我想将记录器从主类传递到子类 并让子类利用父类的记录器设置 子类是一个单独的通用类 即不依赖于主类 如果没有提供记录器 则必须能够创建自己的记录器 主类创建一个记录器 添加一个控制台处理程序 文件处理程序和日志格式化程序
  • 如何抑制“类可能无法响应具有变量方法名称的‘-method’警告?

    如何使用变量选择器名称来防止此警告 NSString methodName SEL method NSSelectorFromString methodName if self respondsToSelector method if me
  • 如何在c#中使用xsd?

    我是 xml 的新手 我使用 xsd exe 从 xml 创建一个 xsd 文件和一个 cs 文件 但我现在不知道什么或如何访问它 我看过一些例子 但发现它们令人困惑 有没有简单的教程或者有人可以给我的例子
  • 启用 TLS 的 mosquitto_sub

    我是 MQTT 新手 遇到一个令人沮丧的问题 我一直在使用MQTT fx订阅一个主题 我已经设置了 经纪商地址 Port 客户ID Enable SSL TLS Topic 这很好用 但我想使用 mosquitto sub 我尝试通过以下方
  • 如何安装 php 5.2 的 Composer? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想下载 php 5 2 的旧版作曲家 如何安装 php 5 2 的 Composer 你不能 因为Composer 需要 PHP 5 3
  • CEFsharp 浏览器等待网站完全加载

    我正在使用 CEFsharp 浏览器 并通过 LoadingStateChanged 事件确定页面完成加载 但它会触发多次 我只需要在页面完全加载后才触发它 该怎么办 private async void Browser LoadingSt
  • 错误构建:无法直接与 dylib/framework XCTAutomationSupport for Architecture arm64 链接

    我正在使用 Xcode Beta 14 尝试构建 WebDriverAgent 低于错误 WebDriverAgent 构建 产品 调试 iphoneos WebDriverAgentLib framework WebDriverAgent
  • 强制 UiView 播放 YouTube 视频

    我正在创建一个包含 YouTube 视频的应用程序 对于这个应用程序 我需要一种方法来强制打开 YouTube 视频 我怎样才能强制它启动 我看过这个 webView userInteractionEnabled NO 但似乎不知道如何使用
  • 如何覆盖 django 电子邮件中的发件人地址(通过 Gmail 发送)

    在我的 settings py 中 我有以下值 EMAIL HOST smtp gmail com EMAIL PORT 587 EMAIL HOST USER us email protected cdn cgi l email prot
  • 如何在 WPF 中实现复选框列表框?

    尽管在编写 Winforms 应用程序方面有一定的经验 但 WPF 的 模糊性 在最佳实践和设计模式方面仍然让我困惑 尽管在运行时填充我的列表 但我的列表框显示为空 我已按照以下简单说明进行操作这篇有用的文章 http merill net