【发布时间】:2011-07-02 05:08:16
【问题描述】:
我有一个 ObservableCollection,其中 T: INotifyDataErrorInfo。如果我在编辑模式下使用 DataGrid,并且对象出现错误,则在显示红色边框的确切列旁边,整行的背景变为红色。
我想要相同的功能,但也需要只读模式!问题是,除非进入编辑模式,否则 DataGrid 不会侦听 ErrorsChanged 事件。我该如何解决?我必须继承 DataGrid 吗? (我不想,我宁愿使用 Styles 或 Behaviors)我在哪里可以访问行背景的样式?
编辑:
我尝试了两个新东西:
- 我已经订阅了数据网格的 RowLoading 事件,并从那里订阅了 Row 的 Loaded 和 DataContext 的 ErrorsChanged 事件(并在 RowUnloading 上取消订阅),并尝试根据这些事件处理程序的有效性设置行的 VisualState数据上下文。但是,由于设置视觉状态不会更改控件的实际状态,因此当它必须更改状态时(例如鼠标悬停或选择时),它会变回 Valid。
- 使用我从 ComboBoxes (see here) 学到的技巧,我尝试使用
row.SetBinding(DataGridRow.TagProperty,new Binding());将 DataContext 绑定到 DataGridRow.Tag(因为 Source 是 DataContext 而路径是整个对象),但绝对没有发生任何事情,就像我之前对 ComboBox 控件的发现相反,它不一定会监听每个 DependencyProperty 上的验证。
因此,找到切实可行的解决方案的可能性越来越小。有什么想法吗?
【问题讨论】:
标签: silverlight validation silverlight-4.0 datagrid