У меня есть комбо, который связан со списком статусов:Невозможно установить 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));
}
}
Проблема
- Комбо пуст, когда вид модели отображается.
- Я не могу установить
SelectedStatus
из модели просмотра, даже если я установил привязкуMode=TwoWay
.
Как успешно выбрать элемент в комбо при запуске и из модели просмотра?
@ mm8 является правильным. вам не следует использовать конвертер для выбранного элемента. Однако это не объясняет, почему поле со списком пусто. Похоже, вы привязываетесь к неправильному datacontext. Проверьте окно Ouput во время отладки, есть ли ошибки привязки. Также убедитесь, что DataContext из ComboBox установлен на ViewModel – Liero
Сторона примечания, 'Path = .' pls нет. Это выглядит плохо. – Will
@ Будете ли вы совершенно правы, спасибо. – openshac