WPF Listbox在模板中使用CheckBox进行多项选择

时间:2015-03-02 08:07:01

标签: c# wpf xaml checkbox listbox

我有一个列表框,其中包含一个包含复选框和文本块的datatemplate。如何使用模板中的复选框使多选项工作,以便选择基于复选框的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

1 个答案:

答案 0 :(得分:4)

您应该使用ListBoxItem.IsSelected PropertyCheckbox.IsChecked数据绑定到RelativeSource Binding

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