访问datagridtemplatecoluml的内容

本文关键字:datagridtemplatecoluml 访问 | 更新日期: 2023-09-27 18:17:33

我有一个WPF DataGrid模板列,它有一个来自WPF工具箱的AutoCompleteBox的数据模板。在RowEditEnding事件和验证过程中,我无法看到templatecolen列中的内容。

<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后在验证函数中放置一个断点时,模板列为空。我怎样才能得到它的内容?

访问datagridtemplatecoluml的内容

首先,在AutoCompleteBox的绑定路径中有一个空格。文本属性,我认为这是不允许的

在查看这个之后,似乎它与DataGridTemplateColumn没有任何关系,而是与Wpf工具包中的AutoCompleteBox有关。自从我开始使用AutoCompleteBox,它就一直给我带来麻烦。因此,我决定放弃它,使用一个可编辑的组合框。这个组合框更加清晰,实现起来也更加简单。下面是我的代码现在的样子,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>

背后的代码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);
        }
    }
相关文章:
  • 没有找到相关文章