C# 扩展WPF工具包中的CheckListBoxItem不';不存在

C# 扩展WPF工具包中的CheckListBoxItem不';不存在,c#,wpf,checkboxlist,C#,Wpf,Checkboxlist,我正在使用设计一个复选框。我需要设计 复选框项,但由于某种原因,CheckListBoxItem不存在。或者至少,我的项目在任何地方都找不到引用。这很有趣,因为明确地使用了这些,这似乎很好。我想这可能是一个不同的版本,但为什么会有人删除它 以下是我的代码片段: <Window x:Class="MyProject.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

我正在使用设计一个
复选框
。我需要设计 复选框项,但由于某种原因,
CheckListBoxItem
不存在。或者至少,我的项目在任何地方都找不到引用。这很有趣,因为明确地使用了这些,这似乎很好。我想这可能是一个不同的版本,但为什么会有人删除它

以下是我的代码片段:

 <Window x:Class="MyProject.MainWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
         xmlns:xctkToolkit="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit">
    <Grid>
       <xctkToolkit:CheckListBox Name="m_myCheckBox"> <!-- Works fine -->
            <xctkToolkit:CheckListBox/> <!-- Doesn't work -->
       </xctkToolkit:CheckListBox>
    </Grid>
 </Window>

我将依赖项
Xceed.Wpf.Toolkit
添加到我的项目中。我得到的错误是:

错误MC3074:标记“CheckListBoxItem”在XML命名空间“clr命名空间:Xceed.Wpf.Toolkit”中不存在;assembly=Xceed.Wpf.Toolkit'


如何解决此问题?

只需使用
ListBoxItem
复选框
控件(以及任何ItemsContainer派生控件)不需要定义自己的项类。您可以使用任何ContentControl派生类,但
ListBoxItem
提供了像IsSelected这样的有用属性

更好的解决方案是将
复选框
绑定到您自己的类集合,并设置绑定到类的属性。事实上,这是可以证明的。请注意,您必须将
SelectedItemsOverride
绑定到所选项目的列表,而不是
SelectedItems

例如,假设我的MainWindow.xaml.cs中有以下内容

public MainWindow()
{
    DataContext = this;
    MyItems = new List<string> { "a", "b", "c" };
    JustSelectedItems = new List<string>();
    InitializeComponent();            
}
每次我选中/取消选中某个项目时,它都会从JustSelectedItems中添加或删除


通常,您会使用MVVM框架为每个控件设置正确的DataContext,但是对于这个简单的示例,我简单地告诉表单绑定到自身

谢谢,只需
ListBoxItem
就可以了。不过,关于将其绑定到
DataContext
,我还有另一个问题。当您这样做时,您如何仍然可以访问
ListBoxItem
s?因为我尝试了你的例子,然后
CheckListBox.Items
返回一个字符串数组。例如,我现在如何禁用“b”复选框?
<xctk:CheckListBox 
    ItemsSource="{Binding MyItems}" 
    SelectedItemsOverride="{Binding JustSelectedItems}" />