2011-06-28 432 views
2

我有一個簡單的組合框與複選框作爲項目。我如何防止項目的實際選擇。用戶應該只能夠選中或取消選中複選框?wpf與複選框組合框 - selecteditem

當前,如果我點擊某個元素(而不是內容或檢查本身),它會變成被選中的。與此問題是:ComboBox的TextProperty綁定到一個值顯示檢查項目的名稱。但是,如果選擇了一個ComboBoxItem,則顯示的文本將變爲所選項目的ViewModel的值。

先感謝您的任何建議。

回答

1

好吧,我已經嘗試過使用GetBindingExpression(...)。UpdateTarget(),因爲我的TextProperty綁定,但沒有任何事情發生。此功能只會在佈局更新後才起作用。所以結果:

/// <summary> 
/// Prevents the selection of an item and displays the result of the TextProperty-Binding 
/// </summary> 
/// <param name="sender"></param> 
/// <param name="e"></param> 
private void SeveritiesComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    ComboBox box = sender as ComboBox; 

    if (box == null) 
     return; 

    if (box.SelectedItem != null) 
    { 
     box.SelectedItem = null; 

     EventHandler layoutUpdated = null; 

     layoutUpdated = new EventHandler((o, ev) => 
     { 
      box.GetBindingExpression(ComboBox.TextProperty).UpdateTarget(); 
      box.LayoutUpdated -= layoutUpdated; 
     }); 

     box.LayoutUpdated += layoutUpdated; 
    } 
} 
2

樣,如果你改變你的組合框的ItemsControl什麼:

<ItemsControl ItemsSource="{Binding Path= Items}"> 
    <ItemsControl.ItemTemplate> 
    <DataTemplate> 
     <CheckBox IsChecked="{Binding Checked}" Content="{Binding Name}" /> 
    </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

有一個ItemsControl,而不是一個組合框將顯示所有項目只可檢查的。

+0

我用的是組合框的原因是,我有這方面我在哪裏使用它沒有那麼多的地方。如果我使用itemcontrol,我將無法「彈出」複選框。使用擴展器也不令人滿意。 – SACO

+0

所以你可以改變選擇風格的外觀。檢查[這個問題](http://stackoverflow.com/questions/3829315/stop-highlighting-selected-item-wpf-combobox) – WaltiD

+0

謝謝你的回答。我找到了另一個解決方案 – SACO