выпадающий список wpf с флажком - selecteditem

У меня есть простой ComboBox с флажками как элементами. Как я могу предотвратить фактический выбор предметов. Пользователь должен иметь возможность только устанавливать или снимать флажки?

В настоящее время, если я нажимаю на элемент (не на содержимое или саму проверку), он становится выбранным. Проблема заключается в следующем: TextProperty ComboBox привязан к значению, которое отображает имена отмеченных элементов. Но если один ComboBoxItem становится выбранным, отображаемый текст становится значением ViewModel выбранного элемента.

Заранее благодарим за любое предложение.


person Daniel Bişar    schedule 28.06.2011    source источник


Ответы (2)


Как насчет того, чтобы изменить свой ComboBox на ItemsControl:

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

При наличии ItemsControl вместо ComboBox все элементы будут отображаться только для проверки.

person WaltiD    schedule 28.06.2011
comment
Причина, по которой я использую поле со списком, заключается в том, что в этой области у меня не так много места, где я его использую. Если бы я использовал элемент управления, у меня не было бы возможности устанавливать флажки. Использование Expander тоже не приносит удовлетворения. - person Daniel Bişar; 28.06.2011
comment
Таким образом, вы можете изменить внешний вид стиля выделения. Отметьте этот вопрос - person WaltiD; 28.06.2011

Хорошо, я уже пробовал раньше использовать 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;
    }
}
person Daniel Bişar    schedule 28.06.2011