WPF Listbox 多选与模板中的 CheckBox

问题描述 投票:0回答:2

我有一个带有数据模板的列表框,其中包含复选框和文本块。如何使用模板中的复选框进行多重选择,以便基于复选框的 isChecked 属性进行选择?我的需要是有一个带有复选框的下拉菜单,可以满足多重选择的需求。这是我目前所拥有的。请随时就我可以在哪些方面改进此代码提出建议,因为这就是重点。

enter image description here

XAML:

     <DataTemplate x:Key="WorkCentreItem">
            <StackPanel Orientation="Horizontal">
                <CheckBox Content="{Binding WorkCentre}" IsChecked="{Binding IsChecked}"/>
                <TextBlock Text=" -  "/>
                <TextBlock Text="{Binding Description}"/>
            </StackPanel>
        </DataTemplate>

     <telerik:RadListBox 
        SelectionMode="Multiple" 
        Grid.Row="2" 
        Grid.ColumnSpan="2" 
        Grid.RowSpan="1" 
        Margin="-1,20,0,3"
        ItemsSource="{Binding SampleWorkCentres}"
        ItemTemplate="{StaticResource WorkCentreItem}" 
        ScrollViewer.CanContentScroll="True"
        SelectionChanged="RadListBox_SelectionChanged">         
    </telerik:RadListBox>

型号:

    #region SampleWorkCentres
    public const string SampleWorkCentresPropertyName = "SampleWorkCentres";
    private ObservableCollection<BomWorkCentre> _sampleWorkCentres;
    public ObservableCollection<BomWorkCentre> SampleWorkCentres
    {
        get
        {
            if (this._sampleWorkCentres == null)
            {
                using (SysproKitIssueEntities db = new SysproKitIssueEntities())
                {
                    this._sampleWorkCentres = new ObservableCollection<BomWorkCentre>(db.BomWorkCentres.Select(x => x).Distinct().ToList());
                }
            }
            return this._sampleWorkCentres;
        }

        set
        {
            if (this._sampleWorkCentres == value)
            {
                return;
            }
            this._sampleWorkCentres = value;
            this.RaisePropertyChanged(SampleWorkCentresPropertyName);
        }
    }
    #endregion

    #region SelectedWorkCentres
    public const string SelectedWorkCentresPropertyName = "SelectedWorkCentres";
    private ObservableCollection<BomWorkCentre> _selectedWorkCentres = new ObservableCollection<BomWorkCentre>();
    public ObservableCollection<BomWorkCentre> SelectedWorkCentres
    {
        get
        {
            return this._selectedWorkCentres;
        }

        set
        {
            if (this._selectedWorkCentres != value)
            {
                this._selectedWorkCentres = value;
            }
            this._sampleGridItems = null;
            this.RaisePropertyChanged(SampleGridItemsPropertyName);
            this.RaisePropertyChanged(SelectedWorkCentresPropertyName);
        }
    }
    #endregion
c# wpf xaml checkbox listbox
2个回答
4
投票

您应该使用

Checkbox.IsChecked
ListBoxItem.IsSelected
数据绑定到
RelativeSource Binding
属性
:

<CheckBox Content="{Binding WorkCentre}" IsChecked="{Binding IsSelected, 
    RelativeSource={RelativeSource AncestorType={x:Type ListBoxItem}}}" />

0
投票

任何人都可以分享一个工作代码示例...它不起作用...

© www.soinside.com 2019 - 2024. All rights reserved.