C# wpf Datagrid:验证错误未清除
我有一个datagrid,其中有一列名为ProductName,当此单元格文本发生更改时,我会使用单元格值筛选一些产品来填充listview,因此,用户可以从listview中选择一个项目,并将所选产品映射到单元格。我使用IDataErrorInfo在数据库表中验证所选产品。但目前的问题是,当用户从listview中选择一个有效产品时,我设置了UpdateSourceTrigger=LostFocus,数据网格仍然显示验证错误## 我的xaml是:C# wpf Datagrid:验证错误未清除,c#,wpf,datagrid,C#,Wpf,Datagrid,我有一个datagrid,其中有一列名为ProductName,当此单元格文本发生更改时,我会使用单元格值筛选一些产品来填充listview,因此,用户可以从listview中选择一个项目,并将所选产品映射到单元格。我使用IDataErrorInfo在数据库表中验证所选产品。但目前的问题是,当用户从listview中选择一个有效产品时,我设置了UpdateSourceTrigger=LostFocus,数据网格仍然显示验证错误## 我的xaml是: <my:DataGrid Name="
<my:DataGrid Name="dgReceiveInventory" ItemsSource="{Binding}" SelectionUnit="Cell" AutoGenerateColumns="False" Margin="12,84,10,52" BeginningEdit="dgReceiveInventory_BeginningEdit">
<my:DataGrid.RowValidationRules>
<local:RowDataInfoValidationRule ValidationStep="UpdatedValue" />
</my:DataGrid.RowValidationRules>
<my:DataGrid.Columns>
<!--0-Product Column-->
<my:DataGridTemplateColumn Header="Product Name" Width="200">
<my:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ProductName}" ></TextBlock>
<!--<TextBlock >
<TextBlock.Text>
<Binding Path="ProductName" >
</Binding>
</TextBlock.Text>
</TextBlock>-->
</DataTemplate>
</my:DataGridTemplateColumn.CellTemplate>
<my:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox x:Name="txtbxProduct" Text="{Binding Path=ProductName,Mode=TwoWay,ValidatesOnDataErrors=True}" Style="{StaticResource TextBoxInError}" TextChanged="txtbxProduct_TextChanged" PreviewKeyDown="txtbxProduct_PreviewKeyDown" >
</TextBox>
</DataTemplate>
</my:DataGridTemplateColumn.CellEditingTemplate>
</my:DataGridTemplateColumn>
</my:DataGrid.Columns>
</my:DataGrid>
<GridViewColumn DisplayMemberBinding="{Binding Path=Product_Name}" Header="Product" Width="200" />
</GridView>
</ListView.View>
</ListView>
将数据包映射到datagrid的My listview事件:
<GridViewColumn DisplayMemberBinding="{Binding Path=Product_Name}" Header="Product" Width="200" />
</GridView>
</ListView.View>
</ListView>
private void lstvwProduct_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
if (lstvwProduct.SelectedItem != null)
{
int index = DataGridHelper.GetRowIndexOfSelectedCell(dgReceiveInventory);
if (index == -1 || index == dgReceiveInventory.Items.Count - 1)
return;
DataRowView drow = (DataRowView)lstvwProduct.SelectedItem;
lsItems[index].ProductName = drow.Row["Product_Name"].ToString();
lstvwProduct.Visibility = Visibility.Collapsed;
}
}