无法从 ViewModel 在 ComboBox 上设置 SelectedItem
Cannot set SelectedItem on ComboBox from ViewModel
我有一个绑定到状态列表的组合:
public enum Status
{
[Description(@"Ready")]
Ready,
[Description(@"Not Ready")]
NotReady
}
我正在使用一个转换器来显示组合框中枚举的描述,它基于此处的示例:
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;
}
...
我绑定到视图中的组合框:
<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
。
如何在启动时从视图模型中成功选择组合中的项目?
不要为 SelectedItem
绑定使用转换器:
<ComboBox
ItemsSource="{Binding Statuses}"
SelectedItem="{Binding SelectedStatus}">
...
SelectedItem
属性 应该绑定到 Status
来源 属性 前提是 ItemsSource
属性 绑定到 ObservableCollection<Status>
.
我有一个绑定到状态列表的组合:
public enum Status
{
[Description(@"Ready")]
Ready,
[Description(@"Not Ready")]
NotReady
}
我正在使用一个转换器来显示组合框中枚举的描述,它基于此处的示例:
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;
}
...
我绑定到视图中的组合框:
<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
。
如何在启动时从视图模型中成功选择组合中的项目?
不要为 SelectedItem
绑定使用转换器:
<ComboBox
ItemsSource="{Binding Statuses}"
SelectedItem="{Binding SelectedStatus}">
...
SelectedItem
属性 应该绑定到 Status
来源 属性 前提是 ItemsSource
属性 绑定到 ObservableCollection<Status>
.