簡體   English   中英

捕獲WPF列表框復選框選擇

[英]Capturing WPF Listbox checkbox selection

一直在嘗試找出如何從列表框中捕獲事件。 在模板中,我添加了參數IsChecked =“”,這將啟動我的方法。 但是,問題是試圖捕獲該方法中已檢查的內容。 SelectedItem僅返回當前選定的內容,而不返回該復選框。

object selected = thelistbox.SelectedItem;
DataRow row = ((DataRowView)selected).Row;
string teststring = row.ItemArray[0].ToString();    // Doesn't return the checkbox!

<ListBox IsSynchronizedWithCurrentItem="True" Name="thelistbox" ItemsSource="{Binding mybinding}">
    <ListBox.ItemTemplate>
            <DataTemplate>
                    <StackPanel>
                            <CheckBox Content="{Binding personname}" Checked="CheckBox_Checked" Name="thecheckbox"/>
                        </StackPanel>
                </DataTemplate>
        </ListBox.ItemTemplate>
</ListBox>

理想情況下,應將IsChecked綁定到行上的屬性,即

<CheckBox Content="{Binding personname}" IsChecked="{Binding IsPersonChecked}" Name="thecheckbox"/>

其中“ IsPersonChecked”是您的數據表(或綁定到的任何內容)中的列,就像“ personname”一樣。 然后,您可以從DataRow變量中直接讀取是否檢查它:

DataRow row = ((DataRowView)thelistbox.SelectedValue).Row;
bool isPersonChecked = (bool) row["IsPersonChecked"];

如果鍵入了DataSet,則顯然要使用鍵入的DataRow屬性。

請注意,我使用的是SelectedValue,而不是SelectedItem屬性。 我相信SelectedItem實際上是ListBoxItem的一個實例。 如果要使IsChecked不受約束,可以使用該方法。 然后,您必須考慮整個模板層次結構來檢索CheckBox。 就像是:

bool isChecked = ((CheckBox)((StackPanel) ((ListBoxItem) thelistbox.SelectedItem).Content).Children[0]).IsChecked ?? false;

凌亂。 (將層次結構調試並調整為您將實際獲得的層次。我的代碼可能無法按原樣工作。)

更好的方法是使用CheckBox_Checked處理程序的RoutedEventArgs:

private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
    CheckBox checkBox = (CheckBox) e.Source;
    DataRow row = ((DataRowView) checkBox.DataContext).Row;
    bool isChecked = checkBox.IsChecked ?? false;
}

暫無
暫無

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

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