首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问DataGridTemplateColumn内容

访问DataGridTemplateColumn内容
EN

Stack Overflow用户
提问于 2011-12-13 10:09:23
回答 2查看 660关注 0票数 0

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

代码语言:javascript
复制
<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之后,当我在验证函数中放置断点时,模板列是空的。我如何获取它的内容?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-16 09:28:43

经过研究,它似乎与DataGridTemplateColumn没有任何关系,而是与Wpf Toolkit中的AutoCompleteBox有关。自从我开始使用AutoCompleteBox以来,它对我来说就只是个麻烦。因此,我决定放弃它,转而使用一个可编辑的ComboBox。combobox更简洁,实现起来也更简单。下面是我的代码现在的样子,并且datarowview能够看到用户在框中键入的内容:

代码语言:javascript
复制
<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是一个可观察的字符串集合)

代码语言:javascript
复制
    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);
        }
    }
票数 0
EN

Stack Overflow用户

发布于 2011-12-13 10:43:50

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8483509

复制
相关文章

相似问题

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