【发布时间】:2015-08-20 00:04:37
【问题描述】:
给定以下用作 WPF DataContext 的类:
class ViewModel
{
public ObservableCollection<Task> Tasks { get; set; }
}
还有这个任务类:
public class Task
{
private string startTime;
public Task ID { get; set; }
public string StartTime
{
get { return startTime; }
set
{
// Access ObservableCollection items
startTime = value;
OnPropertyChanged("StartTime");
}
}
}
如何在代码中您看到“// 访问 ObservableCollection 项”的位置访问 Tasks ObservableCollection 中的其他项,以便将设置的实例的 StartTime 与其他任务的 StartTime 进行比较Tasks ObservableCollection 中的项目?
【问题讨论】:
-
我完全不确定我会 - 听起来您可能正在尝试将 ViewModel 级别的功能放入您的模型中。是否有充分的理由不将该比较合并到 ViewModel 中?
-
@goobering:鉴于我想在设置属性时进行比较,你能给我一些指导吗?
-
为什么需要比较?你的方案是什么?
-
@Liero:因为 StartTimes 绑定到 DataGrid 中的 TextBoxes,所以用户可以更改 StartTime。 StartTimes 需要按时间顺序排列,因此如果用户在一行中更改 StartTime,则该时间必须在上一行的 StartTime 之后,并且在下一行的 StartTime 之前。
-
@Liero:更多信息:如果输入的时间不可接受,那么我不想设置该属性。这就是为什么我最初的尝试是尝试在属性的设置逻辑中执行此操作。我可以通过在 TextBox 的 XAML 中指定 LostFocus 属性来做到这一点,并且该属性的值是窗口代码隐藏中的一个方法。如果 TextBox 的值不可接受,我可以将其恢复为原始值。由于 LostFocus 事件发生在属性设置之前,因此不会为属性分配错误值。我的新方法是尝试消除代码隐藏。