2011-06-28 32 views
2

私はCheckBoxesを持つ単純なComboBoxをItemsとして持っています。どのようにアイテムの実際の選択を防ぐことができます。ユーザーはチェックボックスをオンまたはオフにしてください。wpf combobox with checkbox - selecteditem

現在、要素(コンテンツまたは小切手自体ではなく)をクリックすると、選択されます。この問題は次のとおりです。ComboBoxのTextPropertyは、チェックされた項目の名前を表示する値にバインドされています。しかし、1つのComboBoxItemが選択されると、表示されるテキストは選択された項目のViewModelの値になります。

ご意見ありがとうございます。

答えて

1

私はTextPropertyがバインドされているのに何も起こらないので、GetBindingExpression(...)を使用する前に既に試しました。UpdateTarget()この関数は、レイアウトが更新された後にのみ有効です。その結果、

/// <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にを持つ

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

にのみチェック可能なすべての項目が表示されます。

+0

私がコンボボックスを使用する理由は、私がそれを使用しているこのエリアにあまり置かれていないということです。 itemcontrolを使用すると、チェックボックスを "ポップアップ"する機能はありません。エキスパンダーを使用することも満足のいくものではありません。 – SACO

+0

選択スタイルの外観を変更することができます。 [この質問]を確認してください(http://stackoverflow.com/questions/3829315/stop-highlighting-selected-item-wpf-combobox) – WaltiD

+0

お返事ありがとうございます。私は別の解決策を見つけた... – SACO

関連する問題