2017-02-23 88 views
0

У меня есть комбо, который связан со списком статусов:Невозможно установить SelectedItem на ComboBox из ViewModel

public enum Status 
{ 
    [Description(@"Ready")] 
    Ready, 

    [Description(@"Not Ready")] 
    NotReady 
} 

Я использую конвертер для отображения описания перечисления в поле со списком, который на примере здесь: https://stackoverflow.com/a/3987099/283787

public class EnumConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (value == null) 
     { 
      return DependencyProperty.UnsetValue; 
     } 

     var description = GetDescription((Enum)value); 

     return description; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     var enumValue = GetValueFromDescription(value.ToString(), targetType); 

     return enumValue; 
    } 
... 

Я обязывающего к коробке COMBOX в представлении:

<ComboBox 
    ItemsSource="{Binding Statuses}" 
    SelectedItem="{Binding SelectedStatus, Converter={StaticResource EnumConverter}}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=., Converter={StaticResource EnumConverter}}" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

мой взгляд модель содержит следующее:

public ObservableCollection<Status> Statuses { get; set; } = new ObservableCollection<Status>(new List<Status> { Status.Ready, Status.NotReady }); 

private Status selectedStatus = Status.Ready; 
public Status SelectedStatus 
{ 
    get 
    { 
     return this.selectedStatus; 
    } 

    set 
    { 
     this.selectedStatus = value; 
     this.NotifyPropertyChanged(nameof(this.SelectedStatus)); 
    } 
} 

Проблема

  1. Комбо пуст, когда вид модели отображается.
  2. Я не могу установить SelectedStatus из модели просмотра, даже если я установил привязку Mode=TwoWay.

Как успешно выбрать элемент в комбо при запуске и из модели просмотра?

+0

@ mm8 является правильным. вам не следует использовать конвертер для выбранного элемента. Однако это не объясняет, почему поле со списком пусто. Похоже, вы привязываетесь к неправильному datacontext. Проверьте окно Ouput во время отладки, есть ли ошибки привязки. Также убедитесь, что DataContext из ComboBox установлен на ViewModel – Liero

+0

Сторона примечания, 'Path = .' pls нет. Это выглядит плохо. – Will

+1

@ Будете ли вы совершенно правы, спасибо. – openshac

ответ

1

Не используйте преобразователь для SelectedItem связывания:

<ComboBox 
    ItemsSource="{Binding Statuses}" 
    SelectedItem="{Binding SelectedStatus}"> 
... 

Свойство SelectedItem должен быть привязан к собственности в Status источника при условии, что ItemsSource свойство связано с ObservableCollection<Status>.

Смежные вопросы