在WPF DataGrid中,当用户单击或键入最后一行时,datagrid会使用该类型的默认空构造函数自动将新项添加到ItemsSource集合。
问题是此类型的空构造函数创建了一个本身有效的对象,但在其他项集合的上下文中可能无效。例如,假设每行都有一个带有列表的下拉列表。但是,每件事只能选择一行。当用户添加新项目时,我需要检查所有其他行,并确保我没有将此值设置为已选择的内容。 这必须在项目添加到集合之前发生,因为模型中有一些我无法更改的验证。
这是一个简单的例子:
<Window ... Loaded="Window_Loaded">
<DataGrid ItemsSource="{Binding Items}" />
</Window>
public partial class MainWindow : Window
{
...
private void Window_Loaded(object sender, RoutedEventArgs e)
{
DataContext = new ViewModel();
}
}
public class ViewModel
{
public ObservableCollection<Item> Items { get; set; }
public ViewModel() { Items = new ObservableCollection<Item>(); }
}
public class Item
{
public string Column1 { get; set; }
public string Column2 { get; set; }
public string Column3 { get; set; }
public string Column4 { get; set; }
}
添加新项时,将调用默认构造函数,并且所有属性都为null。假设这是任何单个项目的有效状态。但是,当我将这些项目放在一个集合中时,这不再有效。我需要在将项添加到集合之前设置一些值。