wpf выпадающий список с флажком - selecteditem - PullRequest
2 голосов
/ 28 июня 2011

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

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

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

Ответы [ 2 ]

2 голосов
/ 28 июня 2011

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

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

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

1 голос
/ 28 июня 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;
    }
}
...