首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WPF验证(BindingGroup).item[0]返回null

问WPF验证(BindingGroup).item[0]返回null
EN

Stack Overflow用户
提问于 2014-11-18 13:33:19
回答 1查看 686关注 0票数 0

我试图在MSDN示例http://msdn.microsoft.com/en-us/library/ee622975(v=vs.110).aspx上为我的数据基础进行一些验证,

XAML码

代码语言:javascript
复制
 <DataGrid x:Name="grdQuoteDetail" Height="319" VerticalAlignment="Top"   DockPanel.Dock="Top" Margin="0,10,0,0" RowEditEnding="grdQuoteDetailSave" CellEditEnding="grdQuoteDetail_CellEditEnding"  AutoGenerateColumns="False">
            <DataGrid.RowValidationRules>
                <local:CourseValidationRule ValidationStep="UpdatedValue"/>
            </DataGrid.RowValidationRules>
            <DataGrid.Columns>
                <DataGridTextColumn Header="No" Binding="{Binding No ,  ValidatesOnExceptions=True}" Width="50"  />
                <DataGridTextColumn Header="Description" Binding="{Binding Description}" Width="*" />
                <DataGridTextColumn Header="Total" Binding="{Binding Total}" Width="120" />
            </DataGrid.Columns>
 </DataGrid>

不同的是,我使用一个类来生成datatable,并将网格的项目源设置为它。

CS码

代码语言:javascript
复制
private void genTable()
{     
        dtQuoteDetail.Columns.Add(new DataColumn("No", Type.GetType("System.Int32")));
        dtQuoteDetail.Columns.Add(new DataColumn("Description", Type.GetType("System.String")));
        dtQuoteDetail.Columns.Add(new DataColumn("Total", Type.GetType("System.Double")));
        DataRow dr = dtQuoteDetail.NewRow();
        dr["No"] = 1;
        dr["Description"] = "";
        dr["Total"] = 0;
        dtQuoteDetail.Rows.Add(dr);
        grdQuoteDetail.ItemsSource = dtQuoteDetail.DefaultView;  

}

验证代码

代码语言:javascript
复制
public class CourseValidationRule : ValidationRule
{
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
    {

        tblTesting qt = (value as BindingGroup).Items[0] as tblTesting ;  //Return Null 
        if (qt.No > 10)
        {
            return new ValidationResult(false, "This Numbe cannot greater than 10");
        }
        else
        {
            return ValidationResult.ValidResult;
        }

    }
}

用于tblTesting的类文件

代码语言:javascript
复制
 public class tblTesting 
 { 
        public int No {get;set;}
        public string Description {get;set;}
        public double Total {get;set;}
 }

我要去找NUll

qt

我不知道为什么,任何指导都会感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-18 14:10:20

因为(value as BindingGroup).Items[0]的类型是'DataRowView',所以它与您的tblTesting类无关。

您可以获得对应于NO属性的第一个单元格的值。

代码语言:javascript
复制
var dataRowView = (value as BindingGroup).Items[0] as DataRowView;
int no = Convert.ToInt32(dataRowView.Row[0]);

if (no > 10)
//do the rest...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26995618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档