在将项目添加到WPF数据网格之前修改该项目

时间:2014-07-17 15:19:15

标签: c# wpf datagrid

在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。假设这是任何单个项目的有效状态。但是,当我将这些项目放在一个集合中时,这不再有效。我需要在将项添加到集合之前设置一些值。

0 个答案:

没有答案