簡體   English   中英

如何將復選框綁定到datagrid wpf中的項目列表中的類對象

[英]How to Bind checkbox to class object in List of items in datagrid wpf

我有一個綁定到包含itemsource的項目列表的datagrid。 復選框控件是網格上的一列,當被選中時,將在單擊按鈕時存儲特定的信息。 我的問題是我無法使“對象” checkBox綁定到XAML復選框,並且當我選中該checkbox它給出的值為null或false。

復選框的XAML:

<DataGridTemplateColumn Header="Ist aktiv">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding Path= checkBox }" Name="checkBox" IsEnabled="{Binding Enabled}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn

>

按鈕事件:

private void checkinCheckBox() {


                List<AwaitingMeds> awaitingMedslist = MedicationDatagrid.ItemsSource as List<AwaitingMeds>;
                //List<AwaitingMeds> awaitingMedslistSelected = new List<AwaitingMeds>();


                List<AwaitingMeds> awaitingMedslistSelected = ( from m in awaitingMedslist
                                                                where m.checkBox.Equals( true )
                                                                select m ).ToList<AwaitingMeds>();


                foreach( AwaitingMeds checkedItems in awaitingMedslistSelected )
                  {

                      MedicationDispenseData.UpdateMedicationDispense( checkedItems.MedicationDispenseID, ( int )Enumerations.MedicationDispenseStatus.CheckedIn,false, "" );
                      MedicationDispenseHistory medicationDispenseHistory = new MedicationDispenseHistory();
                      medicationDispenseHistory.MedicationDispenseID = checkedItems.MedicationDispenseID;
                      medicationDispenseHistory.StaffID = GlobalVariables.loggedInStaff.StaffID;
                      medicationDispenseHistory.MedicationDispenseStatusID = ( int )Enumerations.MedicationDispenseStatus.CheckedIn;
                      MedicationDispenseHistoryData.Create( medicationDispenseHistory );

                  }

            }

            public IEnumerable<DataGridRow> GetDataGridRows(DataGrid grid )
            {
                var itemsSource = grid.ItemsSource as System.Collections.IEnumerable;
                if( null == itemsSource ) yield return null;
                foreach( var item in itemsSource )
                {
                    var row = grid.ItemContainerGenerator.ContainerFromItem( item ) as DataGridRow;
                    if( null != row ) yield return row;
                }
            }

您的Checkbox已綁定到Enabled,因此您應該檢查m.Enabled而不是m.checkbox

                List<AwaitingMeds> awaitingMedslistSelected = ( from m in awaitingMedslist
                                                            where m.**Enabled**.Equals( true )
                                                            select m ).ToList<AwaitingMeds>();

我遇到了同樣的問題。

您不能按名稱訪問DataTemplate的控件。 想象一下,如果您的DataGrid有1000行,將會發生什么! 將有1000個“ checkbox ” !!!!!

因此,請嘗試:

<CheckBox IsChecked="{Binding PropertyName,RelativeSource={RelativeSource Self}}" />

注意:您的命名很有誤導性,因此我可能會誤解您的真正意願。 如果是這樣,請發表評論並編輯問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM