C# 在复选框中设置选中项

C# 在复选框中设置选中项,c#,.net,wpf,xaml,xceed,C#,.net,Wpf,Xaml,Xceed,我在用电话。 我需要将一些项目设置为选中项目: <xctk:CheckComboBox x:Name="cbFileType" DisplayMemberPath="Name" SelectedMemberPath="IsChecked"></xctk:CheckComboBox> 但未选中“.jpg”项: 如何将“.jpg”设置为选中项?您应该将要选择的项添加到复选框的SelectedItems集合中: c

我在用电话。 我需要将一些项目设置为选中项目:

<xctk:CheckComboBox x:Name="cbFileType" DisplayMemberPath="Name" SelectedMemberPath="IsChecked"></xctk:CheckComboBox>
但未选中“.jpg”项:


如何将“.jpg”设置为选中项?

您应该将要选择的项添加到
复选框的
SelectedItems
集合中:

cbFileType.Items.Add(new BoolStringClass { Name = ".jpg", IsChecked = true });
cbFileType.Items.Add(new BoolStringClass { Name = ".bmp", IsChecked = false });

foreach (var selectedItem in cbFileType.Items.OfType<BoolStringClass>().Where(x => x.IsChecked))
    cbFileType.SelectedItems.Add(selectedItem);
cbFileType.Items.Add(新BoolStringClass{Name=“.jpg”,IsChecked=true});
cbFileType.Items.Add(新BoolStringClass{Name=“.bmp”,IsChecked=false});
foreach(cbFileType.Items.OfType()中的var selectedItem,其中(x=>x.IsChecked))
cbFileType.SelectedItems.Add(selectedItem);

来自用户mm8的解决方案可行,但这不是MVVM的方式

从文档中:

您需要一个ObservableCollection和一个类,其中包含触发notifychanged事件的IsChecked和Item属性

工作示例下方:当您单击
设置A和C
按钮时,将按预期检查项目
A
C

MainWindow.xaml.cs

using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Windows;

namespace WpfApp6
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private ViewModel viewModel;

        public MainWindow()
        {
            InitializeComponent();

            viewModel = new ViewModel();

            foreach (var item in new string[] { "A", "B", "C", "D"})
            {
                viewModel.CheckComboBoxItems.Add(new CheckComboBoxItems { IsChecked = false, Item = item}); 
            }

            DataContext = viewModel;

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {   
            foreach (var checkBoxToSet in viewModel.CheckComboBoxItems)
            {
                if (checkBoxToSet.Item.Equals("A") || checkBoxToSet.Item.Equals("C"))
                {
                    checkBoxToSet.IsChecked = true;
                }
            }
        }
    }

    public class ViewModel
    {
        public ObservableCollection<CheckComboBoxItems> CheckComboBoxItems { get; set; } = new ObservableCollection<CheckComboBoxItems>();
    }

    public class CheckComboBoxItems : INotifyPropertyChanged
    {
        private bool _isChecked;
        private string _item;

        public bool IsChecked
        {
            get
            {
                return _isChecked;
            }
            set
            {
                _isChecked = value;
                NotifyPropertyChanged("IsChecked");
            }
        }


        public string Item
        {
            get
            {
                return _item;
            }
            set
            {
                _item = value;
                NotifyPropertyChanged("Item");
            }
        }

        private void NotifyPropertyChanged(string propertyName)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}
使用System.Collections.ObjectModel;
使用系统组件模型;
使用System.Linq;
使用System.Windows;
命名空间WpfApp6
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
私有视图模型;
公共主窗口()
{
初始化组件();
viewModel=新的viewModel();
foreach(新字符串[]{“A”、“B”、“C”、“D”}中的var项)
{
添加(新的CheckComboBoxItems{IsChecked=false,Item=Item});
}
DataContext=viewModel;
}
私有无效按钮\u单击(对象发送者,路由目标e)
{   
foreach(viewModel.CheckComboxItems中的var checkBoxToSet)
{
if(checkBoxToSet.Item.Equals(“A”)| | checkBoxToSet.Item.Equals(“C”))
{
checkBoxToSet.IsChecked=true;
}
}
}
}
公共类视图模型
{
公共ObservableCollection CheckComboxItems{get;set;}=new ObservableCollection();
}
公共类CheckComboBoxItems:INotifyPropertyChanged
{
检查私人住宅;
私有字符串_项;
公共场所被检查
{
得到
{
返回-已检查;
}
设置
{
_isChecked=值;
NotifyPropertyChanged(“已检查”);
}
}
公共字符串项
{
得到
{
退货项目;
}
设置
{
_项目=价值;
通知财产变更(“项目”);
}
}
私有void NotifyPropertyChanged(字符串propertyName)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
公共事件属性更改事件处理程序属性更改;
}
}
main window.xaml

<Window x:Class="WpfApp6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp6"
         xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <StackPanel>
        <xctk:CheckComboBox ItemsSource="{Binding CheckComboBoxItems}" DisplayMemberPath="Item" SelectedMemberPath="IsChecked" Height="50" Width="150"/>
        <Button Content="Set A und C" Width="150" Height="50" Margin="20" Click="Button_Click"/>
    </StackPanel>
</Window>


您是否尝试过
ValueMemberPath=“IsChecked”
@un-lucky是的,我得到了相同的结果。“.jpg”也未选中
<Window x:Class="WpfApp6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp6"
         xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <StackPanel>
        <xctk:CheckComboBox ItemsSource="{Binding CheckComboBoxItems}" DisplayMemberPath="Item" SelectedMemberPath="IsChecked" Height="50" Width="150"/>
        <Button Content="Set A und C" Width="150" Height="50" Margin="20" Click="Button_Click"/>
    </StackPanel>
</Window>