2011-06-09 42 views
0

我使用的數據模板的組合框中設置複選框的值,例如:WPF獲取複選框內容

<ComboBox Margin="118,117,163,164" ItemsSource="{Binding collection}"> 
     <ComboBox.ItemTemplate> 
      <DataTemplate> 
       <CheckBox Content="{Binding Name}"/> 
      </DataTemplate> 
     </ComboBox.ItemTemplate> 
    </ComboBox> 

這工作,因爲它應該。我的問題是,當用戶選中該框時,我需要能夠獲取存儲在複選框中的內容值。這可能嗎?

謝謝。

+0

你是什麼意思與 「值存儲的複選框中的內容價值」? – Osiris76 2011-06-09 15:04:48

+0

我假設你的意思是你需要用戶檢查/選擇的所有名稱。 – Gishu 2011-06-09 15:05:54

+0

複選框的文本值存儲爲內容。 – 2011-06-09 15:08:08

回答

2

您需要將複選框的IsChecked屬性綁定到每個項目的支持對象上的另一個屬性。即具有名稱的類型應公開一個布爾屬性IsSelected。

數據綁定會適當地更新IsSelected屬性,這對您在代碼中訪問會很容易。例如您可以遍歷該列表並過濾所有具有IsSelected = false的項目。

代碼示例

XAML

<StackPanel> 
     <ComboBox ItemsSource="{Binding Items}"> 
      <ComboBox.ItemTemplate> 
       <DataTemplate> 
        <CheckBox Content="{Binding Name}" IsChecked="{Binding IsSelected}"/> 
       </DataTemplate> 
      </ComboBox.ItemTemplate> 
     </ComboBox> 
     <Button Click="EvaluateSelectedItems">Show Selected</Button> 
     <TextBlock>Selected Items</TextBlock> 
     <ListBox ItemsSource="{Binding SelectedItems}" DisplayMemberPath="Name" Background="AliceBlue"/> 
    </StackPanel> 

代碼隱藏

public MainWindow() 
{ 
    InitializeComponent(); 
    this.DataContext = this; 

    Items = new List<ItemVM> 
       { 
        new ItemVM {IsSelected = false, Name = "Firefox"}, 
        new ItemVM {IsSelected = false, Name = "Chrome"}, 
        new ItemVM {IsSelected = false, Name = "IE"} 
       }; 
} 

public IEnumerable<ItemVM> Items { get; set; } 
private IEnumerable<ItemVM> _selectedItems; 
public IEnumerable<ItemVM> SelectedItems 
{ 
    get { return _selectedItems; } 
    set 
    { 
     _selectedItems = value; 
     if (PropertyChanged != null) 
      this.PropertyChanged(this, new PropertyChangedEventArgs("SelectedItems")); 
    } 
} 

private void EvaluateSelectedItems(object sender, RoutedEventArgs e) 
{ 
    SelectedItems = Items.Where(item => item.IsSelected); 
} 
+0

不允許我在Checked屬性上使用綁定,因爲它表示它需要事件 – 2011-06-09 15:07:52

+1

屬性名稱是IsChecked,選中它時的事件是Checked。 – 2011-06-09 15:23:08

+0

@達倫 - 耶只是掩蓋了那個..你想綁定的屬性是IsChecked複選框上的布爾屬性。更新.. – Gishu 2011-06-09 15:26:23