我有一个WPF DataGrid模板列,它有一个来自wpf工具包的AutoCompleteBox的DataTemplate。在RowEditEnding事件和验证过程中,我无法看到模板列中的内容。
<DataGridTemplateColumn Header="Account Type" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<toolkit:AutoCompleteBox Text="{Binding Path='Account Type'}" Populating="PopulateAccountTypesACB" IsTextCompletionEnabled="True" BorderThickness="0" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if ((value as BindingGroup).Items.Count == 0)
return new ValidationResult(true, null);
DataRowView row = (value as BindingGroup).Items[0] as DataRowView;
if (row != null)
{
if (ValidateAccountName(row.Row.ItemArray[0].ToString()))
{
return new ValidationResult(true, null);
}
else
{
return new ValidationResult(false,
"Account Name must be between 1 and 100 Characters.");
}
}
else
return new ValidationResult(true, null);
}在创建DataRowView之后,当我在验证函数中放置断点时,模板列是空的。我如何获取它的内容?
发布于 2011-12-16 09:28:43
经过研究,它似乎与DataGridTemplateColumn没有任何关系,而是与Wpf Toolkit中的AutoCompleteBox有关。自从我开始使用AutoCompleteBox以来,它对我来说就只是个麻烦。因此,我决定放弃它,转而使用一个可编辑的ComboBox。combobox更简洁,实现起来也更简单。下面是我的代码现在的样子,并且datarowview能够看到用户在框中键入的内容:
<DataGridTemplateColumn Header="Account Type">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path='Account Type'}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox IsEditable="True" LostFocus="LostFocusAccountTypes" ItemsSource="{DynamicResource types}" Height="23" IsTextSearchEnabled="True"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>代码隐藏(this.Types是一个可观察的字符串集合)
private void PopulateAccountTypes()
{
try
{
string accountQuery = "SELECT AccountType FROM AccountType WHERE UserID = " + MyAccountant.DbProperties.currentUserID + "";
SqlDataReader accountType = null;
SqlCommand query = new SqlCommand(accountQuery, MyAccountant.DbProperties.dbConnection);
accountType = query.ExecuteReader();
while (accountType.Read())
{
this.Types.Add(accountType["AccountType"].ToString());
}
accountType.Close();
Resources["types"] = this.Types;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}发布于 2011-12-13 10:43:50
首先,在AutoCompleteBox.Text属性的绑定路径中有一个空格,我认为这是不允许的。
https://stackoverflow.com/questions/8483509
复制相似问题