WPF DataGrid - 如何将单元格和行验证与 DataGridTemplateColumn 一起使用

发布于 2024-09-10 14:32:12 字数 587 浏览 1 评论 0原文

如何通过 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>

How do I use cell and row validation with 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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

溇涏 2024-09-17 14:32:12

这有点猜测,但看起来您想阻止选择某些项目。最简单的方法是将它们从列表中删除,但您可以使用验证来完成此操作,如下所示。

如果所选项目无效,请在 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 em> 绑定 - 错误绑定上的错误属性):

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

It's a bit of a guess, but it looks like you want to prevent certain items from being selected. The easiest way would be to remove them from the list, but you could do it using validation as follows.

If the selected item is invalid, throw an exception in the Setter in the ViewModel:

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;
    }
}

Then set the binding for SelectedItem to ValidateOnExceptions (note that in your question, you specified ValidatesOnErrors for the ItemsSource binding - wrong property on the wrong binding):

<ComboBox SelectedItem="{Binding Path=DataType, ValidatesOnExceptions=True}" 
ItemsSource="{Binding Source={x:Static app:ApplicationConfiguration.DataTypes}}"/>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文