WPF DataGrid - 如何使用DataGridTemplateColumn进行单元格和行验证

时间:2010-07-15 06:26:35

标签: wpf wpfdatagrid

如何在DataGridTemplateColumn中使用单元格和行验证?

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <TextBlock Text="{Binding DataType}"/>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <ComboBox SelectedItem="{Binding DataType}" ItemsSource="{Binding Source={x:Static app:ApplicationConfiguration.DataTypes}, ValidatesOnDataErrors=True}"/>
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

1 个答案:

答案 0 :(得分:1)

这是一个猜测,但看起来你想要阻止选择某些项目。最简单的方法是从列表中删除它们,但您可以使用验证来执行此操作。

如果所选项目无效,请在ViewModel中的Setter中抛出异常:

public object DataType
{
    get { return dataType; }
    set
    {
        if(valueNotAllowed(value))
            throw new Exception(string.Format("{0} is not a valid selection", value.ToString());
        dataType = value;
    }
}

然后将SelectedItem的绑定设置为ValidateOnExceptions(请注意,在您的问题中,您为 ItemsSource 绑定指定了 ValidatesOnErrors - 错误绑定的错误属性):

<ComboBox SelectedItem="{Binding Path=DataType, ValidatesOnExceptions=True}" 
ItemsSource="{Binding Source={x:Static app:ApplicationConfiguration.DataTypes}}"/>