如何在 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 中实现复选框列表框? 的相关文章

随机推荐

  • 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