我使用ComboBox作爲ItemTemplate作爲CheckBox,我想迭代所有項目,獲取它們的檢查狀態並將其內容寫入字符串(如果選中爲true)。問題是我使用SqlDataReader從數據庫中填充和綁定ComboBox,我找不到訪問項目IsChecked屬性的方法。當使用CheckBox作爲ItemTemplate時迭代ComboBox項目
<ComboBox>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Click="CheckBox_Click" Content="{Binding}" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}" Tag="{RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
我試圖鑄造他們的單擊事件的組合框項目爲複選框這樣:
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < myComboBox.Items.Count; i++)
{
CheckBox cb = (myComboBox.Items[i] as CheckBox);
if (cb.IsChecked == true)
{
myString += "," + myComboBox.SelectedItem.ToString() + "";
}
}
}
但CB總是返回NULL。我猜測它是與IsChecked屬性綁定的東西。
我想得到這個工作,但我不想創建一個對象/類來填充組合框,因爲我需要它填充數據庫。我非常感謝任何幫助。
啊,它已經永遠,因爲我已經做到了這一點,但我很確定的問題是,控制樹和邏輯樹不同,所以我認爲你必須搜索控制。爲了讓你的生活更輕鬆,只需使用數據綁定並製作你自己的類型,然後只需將你的類型的屬性設置爲true即可。 –
不要在WPF的程序代碼中操作UI元素。這就是XAML的用途。相反,在ViewModel級別處理此操作。 –
不要遍歷複選框。迭代Combobox的ItemsSource – Shoe