【发布时间】:2016-03-26 15:05:39
【问题描述】:
在我的项目中的模型下,我有以下枚举:
public enum Status { Pending, Approved, Skipped, Denied };
以及以下约会课程:
public class Appointment
{
public int Id { get; set; }
public DateTime Date { get; set; }
public string Details { get; set; }
public string Location { get; set; }
public Status Status { get; set; }
}
在 ViewModel 中,我有以下属性:
private Appointment _nextAppointemnt;
public List<Appointment> AppList { get; set; }
public Appointment NextAppointment
{
get { return _nextAppointemnt; }
set { _nextAppointemnt = value; OnPropertyChanged("NextAppointment"); }
}
public string[] Statuses { get; set; }
AppList - 从数据库中获取的约会列表;
NextAppointment - 根据当前时间计算 (NextAppointment = AppointmentService.GetNextAppoinment(AppList)) - 仅返回 AppList 中最接近的约会
状态 - 来自枚举状态的状态名称,计算方式为:
Statuses = Enum.GetNames(typeof(Status));
在我的视图中,我有一个组合框 - 它应该具有枚举状态中的所有可能状态,所以我执行以下绑定:
<ComboBox ItemsSource="{Binding Statuses}" />
当我尝试将此组合框的选定值绑定到 NextAppointment.Status 属性时出现问题。
为此,我创建了转换器:
public class EnumToStringConvertor : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
return value.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
return (Status)Enum.Parse(typeof(Status), value.ToString(), true);
}
}
并进行以下绑定:
<ComboBox ItemsSource="{Binding Statuses}" SelectedValue="{Binding NextAppointment.Status, Converter={StaticResource EnumConverter}}"/>
很遗憾,它不起作用(组合框的选定值为空)。
但是,如果在 ViewMode 中创建一个单独的属性,将 NextAppointment.Status 分配给它并将其绑定到组合框的 SelectedValue - 所有这些都像魔术一样工作:
public Status NextAppointmentStatus { get; set; }
NextAppointmentStatus = NextAppointment.Status;
<ComboBox ItemsSource="{Binding Statuses}" SelectedValue="{Binding NextAppointmentStatus, Converter={StaticResource EnumConverter}}"/>
我不明白为什么 NextAppointment.Status 绑定不起作用。你能帮我理解吗?
【问题讨论】:
-
很遗憾,它不起作用 - 怎么样?
-
状态绑定到状态枚举,但选择的值为空(应该是 NextAppointment.Status)
标签: c# wpf binding combobox enums